mysql先分组再排序的sql语句实现
最近项⽬中有⼀个需求, 需要先分组,再排序的功能。 搞了好久,经过敏⼤⼤(后台兄弟)指导, 终于搞出来了,分享给⼤家(demo)。
⼀、例⼦
学⽣信息表
需求: 获取每个学⽣同⼀科(type)下的历史最⾼分数及相关信息。
如, Bob同学语⽂这科,历史最⾼分数是123 第⼀时间想到
sql:
简要说明servlet对象的生命周期>python编程培训多少钱
linux的shell类型有哪些1select*from t_test group by name, type order by score desc;
结果:
1 2 3发现,并不能满⾜我们需求。
原因:先分组了,然后排序不是我们期望的。线盒贴膜率什么意思
我们希望,先排序出最⾼分,然后分组,每个取⼀条。
4. 换个思路, ⽤max来出分数最⾼
sql:mysql语句顺序
1select*, max(score) as max_score from t_test group by name, type;
结果:
5. 然后⽤right join 关联主表, 出全量信息
sql:
1 2 3select a.* from t_test as a right join
matlab数值微分(select name, type, max(score) as max_score from t_test group by name, type) as b on a.name= b.name pe = b.type and a.score = b.max_score
order by b.name, b.type;
结果:
⼆、总结
通过max(), min()可以实现先排序后分组的功能; ⽤right join 可以获取全量信息; group by中的字段, select才能⽤, 如name, type;同理可以实现:最⼩分数的同学信息和除了最⾼分外其它的信息(差集), 欢迎交流学习。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。