表结构如下:
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 (字段名=某字段名,就统计等于这些字段的之前行数)
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 (字段名=某字段名,就统计等于这些字段的之前行数)
SUM(if(科目='语文',1,0)) as 语文,
SUM(if(科目='数学',1,0)) as 数学,
SUM(if(科目='英语',1,0)) as 英语,
SUM(if(科目='物理',1,0)) as 物理
from tt group by 姓名
SUM求和
if做判断,要加哪个
但实际中不会只用sql语句的,原因很简单,如果再多出个历史呢?如果有15项呢?只不能自己从顶到下数二遍吧。
故而,一般都是结合php/java语句来实现,所谓的“行列统计互换”。