关于Mysql分组聚合函数的⼀个⼤坑(易错点)score 表格如下:
题⽬:按平均成绩从⾼到低显⽰所有学⽣的所有课程的成绩以及平均成绩
百度翻译学英语怎么样
select `s_id`, avg(`s_score`),
max(CASE when `c_id` = 01 then `s_score` else null end) as "语⽂",
max(CASE when `c_id` = 02 then `s_score` else null end) as "数学",
max(CASE when `c_id` = 03 then `s_score` else null end) as "英语"
js修改css布局FROM
score
group BY
`s_id`
ORDER BY avg(`s_score`) desc
输出正确结果:
但是在想:既然case都判定课程编号了,那为什么还要⽤聚合函数max(sum也可以)呢?去掉聚合函数之后。select `s_id`, avg(`s_score`),
(CASE when `c_id` = 01 then `s_score` else null end) as "语⽂",
(CASE when `c_id` = 02 then `s_score` else null end) as "数学",
phyone编程和c编程哪个好(CASE when `c_id` = 03 then `s_score` else null end) as "英语"
indexmatch函数FROM
score
group BY
1码默认版块discuz`s_id`
ORDER BY avg(`s_score`) desc
输出结果:mysql菜鸟教程聚合函数
明显出现错误。
分析:这⾥跟case when没有多⼤关系,这是因为分组函数⼀定和聚合函数⼀同存在,要不然你想,⽐如上述数据,按照名字分组后,每个组内都有三个数据,⽽展⽰的时候就只展⽰第⼀条,⽽只有当
与聚合函数⼀起使⽤的时候才会在聚合列的要选择字段进⾏迭代。 同理:sql书写要求:“出现在SELECT⼦句中的单独的列,必须出现在GROUP BY⼦句中作为分组列”
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论