| id | group | sort |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 2 |
| 4 | 2 | 1 |
| 5 | 1 | 3 |
表sort_group如上图所示,要求:选取每组中最大值。
方法1:
SELECT a.group, SUBSTR(GROUP_CONCAT(sort ORDER BY sort DESC) FROM 1 FOR 1) maxsort
FROM sort_group a
GROUP BY `group`;
方法2:
SELECT *
FROM sort_group a
LEFT JOIN sort_group b ON b.`group` = a.`group` AND a.sort < b.sort
WHERE b.sort is null;
这种实现利用了左连接,原理将表根据分组字段进行自连接,然后根据a.sort < b.sort过滤连接,那么连接好的记录中,右表为空时,左表中的a.sort肯定是最大的,这样最后便得到了需求的记录。
参考:https://blog.youkuaiyun.com/asdasd3418/article/details/77715015
本文介绍两种SQL方法来选取每个分组中的最大值,包括使用GROUP_CONCAT和子查询,以及通过左连接和自连接的方式。这两种方法都有效地解决了在SQL中常见的需求,即从每个分组中找出具有最大值的记录。
1151

被折叠的 条评论
为什么被折叠?



