数据表如下: A表
姓名              科目               分数
==========================================================      
小明             语文                88
小明             数学                90
小花             英语                60
小明             英语                78
小花             语文                89
小春             数学                100
小春             英语                95现在我想求出:
1。每个学生的总分数/表的总分数
小明    (88+90+78)/表里总分
小花     (60+89)/表里总分
小春     (100+95)/表里总分
2。各科总分数/表总分数
语文     (88+89)/表里总分
数学      (90+100)/表里总分
英语       (60+78+95)/表里总分在线等待高手做答,谢谢
实在是没什么分了,CSDN的分比钱还难赚。见谅。。
                       

解决方案 »

  1.   

    1。每个学生的总分数/表的总分数
    小明 (88+90+78)/表里总分
    小花 (60+89)/表里总分
    小春 (100+95)/表里总分select 姓名 , sum(分数*1.0) / (select sum(分数) from a) from a group by 姓名
    2。各科总分数/表总分数
    语文 (88+89)/表里总分
    数学 (90+100)/表里总分
    英语 (60+78+95)/表里总分select 科目 , sum(分数*1.0) / (select sum(分数) from a) from a group by 科目
      

  2.   

    不需要over
    直接
    select 姓名,sum(分数) as 分数 from tb group by 姓名select 科目,sum(分数) as 分数 from tb group by 科目
      

  3.   

    我晕  那斜着的是除啊
    select 姓名,sum(分数)/(select sum(分数) from tb)  as 分数 from tb group by 姓名select 科目,sum(分数)/(select sum(分数) from tb)  as 分数 from tb group by 科目
      

  4.   

    create table a(姓名 varchar(10),科目 varchar(10),分数 int)
    insert into a values('小明', '语文' ,88)
    insert into a values('小明', '数学' ,90)
    insert into a values('小花', '英语' ,60)
    insert into a values('小明', '英语' ,78)
    insert into a values('小花', '语文' ,89)
    insert into a values('小春', '数学' ,100)
    insert into a values('小春', '英语' ,95)
    goselect 姓名 , sum(分数*1.0) / (select sum(分数) from a) from a group by 姓名
    /*
    姓名                                                  
    ---------- ---------------------------------------- 
    小春         .325000
    小花         .248333
    小明         .426666(所影响的行数为 3 行)
    */select 科目 , sum(分数*1.0) / (select sum(分数) from a) from a group by 科目
    /*
    科目                                                  
    ---------- ---------------------------------------- 
    数学         .316666
    英语         .388333
    语文         .295000(所影响的行数为 3 行)*/drop table a
      

  5.   

    create table #tb1(姓名 varchar(10),科目 varchar(10), 分数 int)
    insert #tb1 select '小明','语文',88
    insert #tb1 select '小明','数学', 90
    insert #tb1 select '小花','英语', 60
    insert #tb1 select '小明','英语', 78
    insert #tb1 select '小花','语文', 89
    insert #tb1 select '小春','数学', 100
    insert #tb1 select '小春','英语', 95
    select distinct 姓名,cast(sum(分数) over(partition by 姓名)*1.0/sum(分数) over() as decimal(9,2))   from  #tb1select distinct 科目,cast(sum(分数) over(partition by 科目)*1.0/sum(分数) over() as decimal(9,2))   from  #tb1姓名                                                
    ---------- ---------------------------------------
    小春                                            0.33
    小花                                            0.25
    小明                                            0.43(3 行受影响)科目                                                
    ---------- ---------------------------------------
    数学                                            0.32
    英语                                            0.39
    语文                                            0.30(3 行受影响)
      

  6.   

    不建议用over()
    在这地方没上面几楼的效率高。
      

  7.   

    恩,上面的问题解决了,大家的方法都不错,谢谢
    如果我要算出各个同学的单科成绩  与 他们各自的总分比呢
    就是首先要group by 姓名,然后再用over函数
      

  8.   

    create table a(姓名 varchar(10),科目 varchar(10),分数 int)
    insert into a values('小明', '语文' ,88)
    insert into a values('小明', '数学' ,90)
    insert into a values('小花', '英语' ,60)
    insert into a values('小明', '英语' ,78)
    insert into a values('小花', '语文' ,89)
    insert into a values('小春', '数学' ,100)
    insert into a values('小春', '英语' ,95)
    goselect t.* , t.分数*1.0 / (select sum(分数) from a where 姓名 = t.姓名 ) from a tdrop table a/*
    姓名         科目         分数                                     
    ---------- ---------- ----------- -------------------------- 
    小明         语文         88          .343750000000
    小明         数学         90          .351562500000
    小花         英语         60          .402684563758
    小明         英语         78          .304687500000
    小花         语文         89          .597315436241
    小春         数学         100         .512820512820
    小春         英语         95          .487179487179(所影响的行数为 7 行)*/