表数据
id | name | subject_name | score |
---|
1 | 张三 | 语文 | 100 |
2 | 张三 | 数学 | 90 |
3 | 张三 | 英语 | 80 |
4 | 李四 | 语文 | 90 |
5 | 李四 | 数学 | 95 |
6 | 李四 | 英语 | 90 |
7 | 王五 | 语文 | 80 |
8 | 王五 | 数学 | 85 |
9 | 王五 | 英语 | 99 |
分组 SQL
SELECT
id, name, subject_name, score
FROM (
SELECT
IF(@yy = a.subject_name, @xx := @xx + 1, @xx := 1) xx,
IF(@yy = a.subject_name, @yy, @yy := a.subject_name) yy,
a.*
FROM
test a, (SELECT @xx := 0, @yy := NULL) b
ORDER BY
a.subject_name, a.score DESC
) a
WHERE xx = 1;
运行结果
id | name | subject_name | score |
---|
5 | 李四 | 数学 | 95 |
9 | 王五 | 英语 | 99 |
1 | 张三 | 语文 | 100 |
SQL 中间部分
SELECT
IF(@yy = a.subject_name, @xx := @xx + 1, @xx := 1) xx,
IF(@yy = a.subject_name, @yy, @yy := a.subject_name) yy,
a.*
FROM
test a, (SELECT @xx := 0, @yy := NULL) b
ORDER BY
a.subject_name, a.score DESC
SQL 中间部分运行结果
xx | yy | id | name | subject_name | score |
---|
1 | 数学 | 5 | 李四 | 数学 | 95 |
2 | 数学 | 2 | 张三 | 数学 | 90 |
3 | 数学 | 8 | 王五 | 数学 | 85 |
1 | 英语 | 9 | 王五 | 英语 | 99 |
2 | 英语 | 6 | 李四 | 英语 | 90 |
3 | 英语 | 3 | 张三 | 英语 | 80 |
1 | 语文 | 1 | 张三 | 语文 | 100 |
2 | 语文 | 4 | 李四 | 语文 | 90 |
3 | 语文 | 7 | 王五 | 语文 | 80 |