假设有以下数据表:
CREATE TABLE scores (id INT, score INT);
INSERT INTO scores VALUES (1, 90), (1, 80), (2, 95), (2, 85), (2, 70), (3, 100);
我们可以使用子查询和ORDER BY语句来实现按id分组获取第二大的值:
SELECT id, MAX(score) AS second_max_score
FROM scores
WHERE score < (SELECT MAX(score) FROM scores WHERE id = scores.id)
GROUP BY id;
输出结果为:
+----+-----------------+
| id | second_max_score |
+----+-----------------+
| 1 | 80|
| 2 | 85|
+----+-----------------+
以上查询首先对id进行分组,然后在每组内筛选分数比该组的最大分数小的记录,并从中选取最大的分数作为第二大值,并最终返回每组的id和第二大值。
下一篇:按id分组获取最小值和行数