一个表中,不同字段,相同的值,汇总的方法比方说,我有一个学生表,里面存了学生名字,和10个科目每个科目的成绩,一共11个字段我想要一种方法,能汇总每种出现过的成绩,在这个表中出现了次数(也不知道我表达清楚没有,请大家耐心看看吧。先谢谢了)

解决方案 »

  1.   

    没有看到记录及要求结果,
    TRY:
    SELECT 科目,成绩,COUNT(*)
    FROM TT GROUP BY 科目,成绩
      

  2.   

    to:WWWWA 
    数据表name,cj1,cj2,cj3,cj4.....cj10
    xx,90,70,65,80,......50
    zs,90,70,65,80,......80
    ss,90,70,65,80,......90
    zz,54,65,70,66,......70
    结果要求统计出,70,在整个表中,出现了多少次
      

  3.   

    例如:
    table: studentID,chinese,english,maths,.....SQL:
    select studentID,sum(ifnull(chinese,0)+ifnull(english,0)+ifnull(...,0)+...) as totalScode,sum(if(ifnull(chinese,-1)>=0,1,0)+if(ifnull(english,-1)>=0,1,0)+if(ifnull(...,-1)>=0,1,0)+...) as totalNum from table ;
      

  4.   

    结果要求统计出,70,在整个表中,出现了多少次:
    select sum(if(cj1=70,1,0)+if(cj2=70,1,0)+if(cj3=70,1,0)+...+if(cj9=70,1,0)+if(cj10=70,1,0)) as totalnum70 from table where 1 group by 1
      

  5.   

    -------------------付上和专家的聊天记录,功能实现了--------------------------------
    数据表 name,cj1,cj2,cj3,cj4.....cj10 
    xx,90,70,65,80,......50 
    zs,90,70,65,80,......80 
    ss,90,70,65,80,......90 
    zz,54,65,70,66,......70 
    KyoUs      2008年12月05日 13点49分47秒 说:
    不好意思,我只是举个例子,我还没有数据库呢 
    是从cj1-cj10中选择
    KyoUs      2008年12月05日 13点50分40秒 说:
    name,cj1,cj2,cj3,cj4,cj5 
    xx,90,70,65,80,50 
    zs,90,70,65,80,80 
    ss,90,70,65,80,90 
    zz,54,65,70,66,70 
    如果是这样子,结果就是5
    WWWWA      2008年12月05日 13点53分37秒 说:
    SELECT sum(if(cj1=70,1,0))+sum(if(cj2=70,1,0))+
    sum(if(cj3=70,1,0))+sum(if(cj4=70,1,0))+sum(if(cj5=70,1,0)) from ff2
    KyoUs      2008年12月05日 13点59分53秒 说:
    结果应该是: 
    90:4 
    70:5 
    65:4 
    80:4 
    50:1 
    54:1 
    66:1
    WWWWA      2008年12月05日 14点01分03秒 说:
    select cj1,count(*) from (
    select cj1 from tt
    union all
    select cj2 from tt
    union all
    select cj3 from tt
    union all
    select cj4 from tt
    union all
    select cj5 from tt) a
    group by cj1KyoUs      2008年12月05日 14点04分42秒 说:能不能稍微解释一下? 
    我怎么感觉,这样子写的话,只能把cj1字段出现过的数字汇总啊。
    WWWWA      2008年12月05日 14点07分22秒 说:
    NO,将CJ1-CJ5的内容从行->列,CJ1只是取一个字段名的作用,内容是CJ1-CJ5,你可以看看
    KyoUs      2008年12月05日 14点24分37秒 说:
    a,是合成的新表?
    WWWWA      2008年12月05日 14点27分20秒 说:
    虚拟表的别名
    KyoUs      2008年12月05日 14点30分11秒 说:
    哦哦。是说,还以为和 a group by cj1是一句呢。不好意思,我没有运行环境,只能模拟着理解。而且本来也不懂SQL 还是不太懂 select cj1,count(*)这一句,cj1,本身有什么作用吗?如果有虚拟表a了,是不是这个cj1本身,也可以随便写?
    WWWWA      2008年12月05日 14点36分06秒 说:
    1、建议你看看SQL的格式、要求;
    2、select cj1,count(*):按CJ1字段名分组,CJ1是一个字段名,内容CJ1-CJ5
    CJ1可以重新取名。
    KyoUs      2008年12月05日 15点01分24秒 说:
    1,再次感激 
    2,事很急,只能麻烦你了。以问代看了。 
    3,我模拟一下运行状态,问问不理解的地方 
    ----------------------------------- 
    select cj1 from tt 
    union all 
    select cj2 from tt 
    union all 
    select cj3 from tt 
    union all 
    select cj4 from tt 
    union all 
    select cj5 from tt) a 
    --------------------- 
    生成一个虚拟表a,结构是 cj1一个字段,里面存了tt表中,cj1-cj5字段所有数据 表达起来就是 
    cj1 
    70 
    60 
    89 
    79 
    69 
    60.. 这样子 
    然后再结合 select cj1,count(*) from a ,可以统计cj1,一共有多少数据 
    加上 group by cj1 后,就可以统计,相同的数据分别有多少了? 那么,a表中cj1这个字段,是因为合并时,第一条是select cj1 from tt,所以才是cj1的吗? 
    比如别人这个例子中,最后一个运行结果中的name字段 
    SQL> select * from a; ID NAME 
    ---------- ---------- 
    1 aa 
    2 bb 
    3 cc 
    6 dd 
    7 ee SQL> select * from b; ID ADDR 
    ---------- ---------- 
    1 aa 
    2 bb 
    3 cc 
    4 dd 
    5 ee SQL> select * from a 
    2 union all 
    3 select * from b; ID NAME 
    ---------- ---------- 
    1 aa 
    2 bb 
    3 cc 
    6 dd 
    7 ee 
    1 aa 
    2 bb 
    3 cc 
    4 dd 
    --------------------
    专家还没回答。。可是问题太幼稚了。
      

  6.   

    1 aa
    2 bb
    3 cc
    6 dd
    7 ee 
    1 aa
    2 bb
    3 cc
    4 dd
    5 ee 
      

  7.   

    -------------------付上和专家的聊天记录,功能实现了--------------------------------
    数据表 name,cj1,cj2,cj3,cj4.....cj10 
    xx,90,70,65,80,......50 
    zs,90,70,65,80,......80 
    ss,90,70,65,80,......90 
    zz,54,65,70,66,......70 
    KyoUs      2008年12月05日 13点49分47秒 说:
    不好意思,我只是举个例子,我还没有数据库呢 
    是从cj1-cj10中选择
    KyoUs      2008年12月05日 13点50分40秒 说:
    name,cj1,cj2,cj3,cj4,cj5 
    xx,90,70,65,80,50 
    zs,90,70,65,80,80 
    ss,90,70,65,80,90 
    zz,54,65,70,66,70 
    如果是这样子,结果就是5
    WWWWA      2008年12月05日 13点53分37秒 说:
    SELECT sum(if(cj1=70,1,0))+sum(if(cj2=70,1,0))+
    sum(if(cj3=70,1,0))+sum(if(cj4=70,1,0))+sum(if(cj5=70,1,0)) from ff2
    KyoUs      2008年12月05日 13点59分53秒 说:
    结果应该是: 
    90:4 
    70:5 
    65:4 
    80:4 
    50:1 
    54:1 
    66:1
    WWWWA      2008年12月05日 14点01分03秒 说:
    select cj1,count(*) from (
    select cj1 from tt
    union all
    select cj2 from tt
    union all
    select cj3 from tt
    union all
    select cj4 from tt
    union all
    select cj5 from tt) a
    group by cj1KyoUs      2008年12月05日 14点04分42秒 说:能不能稍微解释一下? 
    我怎么感觉,这样子写的话,只能把cj1字段出现过的数字汇总啊。
    WWWWA      2008年12月05日 14点07分22秒 说:
    NO,将CJ1-CJ5的内容从行->列,CJ1只是取一个字段名的作用,内容是CJ1-CJ5,你可以看看
    KyoUs      2008年12月05日 14点24分37秒 说:
    a,是合成的新表?
    WWWWA      2008年12月05日 14点27分20秒 说:
    虚拟表的别名
    KyoUs      2008年12月05日 14点30分11秒 说:
    哦哦。是说,还以为和 a group by cj1是一句呢。不好意思,我没有运行环境,只能模拟着理解。而且本来也不懂SQL 还是不太懂 select cj1,count(*)这一句,cj1,本身有什么作用吗?如果有虚拟表a了,是不是这个cj1本身,也可以随便写?
    WWWWA      2008年12月05日 14点36分06秒 说:
    1、建议你看看SQL的格式、要求;
    2、select cj1,count(*):按CJ1字段名分组,CJ1是一个字段名,内容CJ1-CJ5
    CJ1可以重新取名。
    KyoUs      2008年12月05日 15点01分24秒 说:
    1,再次感激 
    2,事很急,只能麻烦你了。以问代看了。 
    3,我模拟一下运行状态,问问不理解的地方 
    ----------------------------------- 
    select cj1 from tt 
    union all 
    select cj2 from tt 
    union all 
    select cj3 from tt 
    union all 
    select cj4 from tt 
    union all 
    select cj5 from tt) a 
    --------------------- 
    生成一个虚拟表a,结构是 cj1一个字段,里面存了tt表中,cj1-cj5字段所有数据 表达起来就是 
    cj1 
    70 
    60 
    89 
    79 
    69 
    60.. 这样子 
    然后再结合 select cj1,count(*) from a ,可以统计cj1,一共有多少数据 
    加上 group by cj1 后,就可以统计,相同的数据分别有多少了? 那么,a表中cj1这个字段,是因为合并时,第一条是select cj1 from tt,所以才是cj1的吗? 
    比如别人这个例子中,最后一个运行结果中的name字段 
    SQL> select * from a; ID NAME 
    ---------- ---------- 
    1 aa 
    2 bb 
    3 cc 
    6 dd 
    7 ee SQL> select * from b; ID ADDR 
    ---------- ---------- 
    1 aa 
    2 bb 
    3 cc 
    4 dd 
    5 ee SQL> select * from a 
    2 union all 
    3 select * from b; ID NAME 
    ---------- ---------- 
    1 aa 
    2 bb 
    3 cc 
    6 dd 
    7 ee 
    1 aa 
    2 bb 
    3 cc 
    4 dd 
    --------------------
    专家还没回答。。可是问题太幼稚了。