gpt4 book ai didi

mysql - 如何在 MySQL 中进行分组排名

转载 作者:IT老高 更新时间:2023-10-28 23:44:29 26 4
gpt4 key购买 nike

所以我有一张如下表:

ID_STUDENT | ID_CLASS | GRADE
-----------------------------
1 | 1 | 90
1 | 2 | 80
2 | 1 | 99
3 | 1 | 80
4 | 1 | 70
5 | 2 | 78
6 | 2 | 90
6 | 3 | 50
7 | 3 | 90

然后我需要对它们进行分组、排序和排序:

ID_STUDENT | ID_CLASS | GRADE | RANK
------------------------------------
2 | 1 | 99 | 1
1 | 1 | 90 | 2
3 | 1 | 80 | 3
4 | 1 | 70 | 4
6 | 2 | 90 | 1
1 | 2 | 80 | 2
5 | 2 | 78 | 3
7 | 3 | 90 | 1
6 | 3 | 50 | 2

现在我知道您可以使用临时变量来进行排名,like here ,但是我该如何为分组集呢?感谢您的任何见解!

最佳答案

SELECT id_student, id_class, grade,
@student:=CASE WHEN @class <> id_class THEN 0 ELSE @student+1 END AS rn,
@class:=id_class AS clset
FROM
(SELECT @student:= -1) s,
(SELECT @class:= -1) c,
(SELECT *
FROM mytable
ORDER BY id_class, id_student
) t

这很简单:

  1. 初始查询首先按 id_class 排序,然后按 id_student 排序。
  2. @student@class 被初始化为 -1
  3. @class 用于测试是否进入下一组。如果 id_class 的先前值(存储在 @class 中)不等于当前值(存储在 id_class 中) ,@student 归零。否则递增。
  4. @class 被赋予了新的 id_class 值,它将用于下一行第 3 步的测试。

关于mysql - 如何在 MySQL 中进行分组排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/532878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com