表结构如下:
id 姓名 科目 成绩     日期
1   AA   语文  99     2012、1、1
2   AA    语文  90    2012、2、1
3.  AA   语文  91     2012、3、1
2   BB   数学  90     2012、1、3
3   CC   英语  80     2012、1、4
4   DD   物理   70    2012、1、5
我想用SQL语句按如下统计记录行数(不是成绩)
姓名 语文  数学   英语   物理
AA    3
BB          1
CC                 1
DD                         1
我参考了
http://blog.chinaunix.net/uid-7692530-id-2567582.html
http://blog.csdn.net/lingxyd_0/article/details/4294796
参考里的一般都是SUM(if (字段名=某字段名,数值,0))
统计行数咋办呢 if (字段名=某字段名,就统计等于这些字段的之前行数)

解决方案 »

  1.   

    select 姓名,
    SUM(if(科目='语文',1,0)) as 语文,
    SUM(if(科目='数学',1,0)) as 数学,
    SUM(if(科目='英语',1,0)) as 英语,
    SUM(if(科目='物理',1,0)) as 物理
    from tt  group by 姓名
      

  2.   

    此类问题,用
    SUM求和
    if做判断,要加哪个
    但实际中不会只用sql语句的,原因很简单,如果再多出个历史呢?如果有15项呢?只不能自己从顶到下数二遍吧。
    故而,一般都是结合php/java语句来实现,所谓的“行列统计互换”。