mysql查缺补漏(三) count函数问题和行列转置

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.csdn.net/mchdba/article/details/39163695




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值