count函数问题
1. 使用count(别名.*)遇到的问题
举个例子说:
SELECT COUNT(a.*),AVG(b.ps_score),COUNT(b.*)
FROM qdwyc_dd a LEFT JOIN qdwyc_evaluation_score b
ON a.dd_num=b.dd_num WHERE a.xc_status=4 and b.ps_type=1
count(别名.*) 失效,解决方案是取 count(别名.id)
2. 统计业务含义特征的数量,而不是取全部,这时候count函数无法起作用了
举个例子来说:
学生表:student ,课程表 course ,如果我想要一次就统计分数大于60的学生数量,且不想要只查询分数大于60的学生
select
count(m.id) '总学生数量',
sum(if(m.score>60,1,0)) '及格的学生数量',
count(distinct(n.id)) '课程数量'
from student m join course n on m.course_id = n.id
解决:sum(if(条件,1,0)) 统计业务含义的数量,当然 if 可以替换为case when
行列转置
常见的场景:
统计不同学生,每个课程的成绩
INSERT INTO tb VALUES('张三','语文',74);
INSERT INTO tb VALUES('张三','数学',83);
INSERT INTO tb VALUES('张三','物理',93);
INSERT INTO tb VALUES('李四','语文',74);
INSERT INTO tb VALUES('李四','数学',84);
INSERT INTO tb VALUES('李四','物理',94);
sql:
SELECT cname AS "姓名",
SUM(IF(cource="语文",score,0)) AS "语文",
SUM(IF(cource="数学",score,0)) AS "数学",
SUM(IF(cource="物理",score,0)) AS "物理",
SUM(score) AS "总成绩",
ROUND(AVG(score),2) AS "平均成绩"
FROM tb
GROUP BY cname
转载:http://blog.youkuaiyun.com/mchdba/article/details/39163695