高效获取每个学生的最高分记录:MySQL查询语句详解
本文将演示如何使用MySQL查询语句,从score表中提取每个学生的最高分记录。score表结构如下:
id | student_id | score | date |
---|---|---|---|
1 | 1 | 80 | 20221118 |
2 | 2 | 88 | 20221118 |
3 | 1 | 78 | 20221118 |
4 | 2 | 98 | 20221118 |
5 | 3 | 89 | 20221117 |
6 | 2 | 72 | 20221117 |
7 | 1 | 63 | 20221117 |
8 | 3 | 81 | 20221117 |
9 | 1 | 67 | 20221116 |
10 | 2 | 86 | 20221116 |
目标:获取每个学生student_id最近一次考试的最高分记录。
解决方案:结合子查询和窗口函数ROW_NUMBER(),我们可以高效地实现这一目标:
SELECT id, student_id, score, date FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY student_id ORDER BY score DESC, date DESC) AS ranking FROM score ) AS tmp WHERE ranking = 1;
语句解析:
内部查询: SELECT *, ROW_NUMBER() OVER (PARTITION BY student_id ORDER BY score DESC, date DESC) AS ranking FROM score
外部查询: SELECT id, student_id, score, date FROM (...) AS tmp WHERE ranking = 1;
此方法清晰高效地解决了问题,避免了复杂的连接查询,是处理此类问题的最佳实践。
以上就是如何用MySQL查询每个学生的最高分记录?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号