SQL 分组排序后取值
场景前要: 从前有三个班级,每个班级的学生成绩各异,有一天睿智的校长希望知道这一年中,每个班级近一年里所有的学生成绩信息,和查询每个班级近一年里所有第一名的学生成绩信息,故事由此展开:
(老师:不要问为什么个别学生信息有差异,问就是他是主角)
class 班级表
id | class_name | stu_id |
---|---|---|
1 | 先锋班 | 9527 |
2 | 先锋班 | 444 |
2 | 呆呆班 | 111 |
2 | 傻傻班 | 222 |
students 学生表
id | name | sex |
---|---|---|
111 | 张三 | 男 |
222 | 李四 | 女 |
9527 | 顾帅哥 | 男 |
444 | 小美 | 女 |
score 成绩表
id | stu_id | score | time |
---|---|---|---|
1 | 111 | 50 | 2100-07-22 |
1 | 222 | 60 | 2100-07-22 |
1 | 9527 | 100 | 2100-07-22 |
1 | 444 | 99 | 2100-07-22 |
1 | 111 | 20 | 2100-06-01 |
1 | 222 | 30 | 2100-06-01 |
1 | 9527 | 100 | 2100-06-01 |
1 | 444 | 80 | 2100-06-01 |
-- 查询每个班级近一年里所有的学生成绩信息
select
a.name, -- 学生名称
a.sex, -- 学生性别
b.class_name as className, -- 学生班级
c.score, -- 学生成绩
c."time" -- 考试时间
from students a