从 MySQL 中的查询列创建排名列
Creating a ranking column from a queried column in MySQL
我想在我的查询中建立一个排名列——我在 Stack 上发现了一些类似的情况,但这个有点不同,我不能让它发挥作用。我有一个 table,EnrollmentX,有两列,一个唯一的 StudentID 和一个 GroupId(为了便于讨论,组 1:3)。我需要同时计算这三个组中每个组的学生人数,然后按学生人数对组进行排名。我已经数到:
SELECT
EnrollmentX.GroupId,
COUNT(EnrollmentX.StudentId) AS StudentCnt
FROM EnrollmentX
GROUP BY
EnrollmentX.GroupId
这会输出两列,一列用于 GroupId,1:3,一列用于 StudentCnt,每组的学生人数正确。我无法解决的是如何在构建 StudentCnt 列之后使用它来创建第三个排名列。
如果你在 mysql 8 上,如果你想要不同的排名,options.Change 内部查询中的顺序更具可读性。
SELECT GroupId, StudentCnt, @Rank:=@Rank + 1 AS rank FROM
(SELECT EnrollmentX.GroupId,
COUNT(EnrollmentX.StudentId) AS StudentCnt
FROM EnrollmentX
GROUP BY
EnrollmentX.GroupId
ORDER BY StudentCnt DESC
) x CROSS JOIN (SELECT @Rank:=0) y
试试这个查询:
select ex.GroupId, ex.StudentId, exg.cnt from EnrollmentX ex
left join (
SELECT GroupId, COUNT(*) cnt
FROM EnrollmentX
GROUP BY GroupId
) exg on ex.GroupId = exg.GroupId
order by exg.cnt
试一试..
SET @Rank = 0;
SELECT @Rank:=@Rank + 1 rank, EnrollmentX.GroupId,
COUNT(EnrollmentX.StudentId) StudentCnt
FROM EnrollmentX
GROUP BY
EnrollmentX.GroupId
ORDER BY StudentCnt DESC;
我想在我的查询中建立一个排名列——我在 Stack 上发现了一些类似的情况,但这个有点不同,我不能让它发挥作用。我有一个 table,EnrollmentX,有两列,一个唯一的 StudentID 和一个 GroupId(为了便于讨论,组 1:3)。我需要同时计算这三个组中每个组的学生人数,然后按学生人数对组进行排名。我已经数到:
SELECT
EnrollmentX.GroupId,
COUNT(EnrollmentX.StudentId) AS StudentCnt
FROM EnrollmentX
GROUP BY
EnrollmentX.GroupId
这会输出两列,一列用于 GroupId,1:3,一列用于 StudentCnt,每组的学生人数正确。我无法解决的是如何在构建 StudentCnt 列之后使用它来创建第三个排名列。
如果你在 mysql 8 上,如果你想要不同的排名,options.Change 内部查询中的顺序更具可读性。
SELECT GroupId, StudentCnt, @Rank:=@Rank + 1 AS rank FROM
(SELECT EnrollmentX.GroupId,
COUNT(EnrollmentX.StudentId) AS StudentCnt
FROM EnrollmentX
GROUP BY
EnrollmentX.GroupId
ORDER BY StudentCnt DESC
) x CROSS JOIN (SELECT @Rank:=0) y
试试这个查询:
select ex.GroupId, ex.StudentId, exg.cnt from EnrollmentX ex
left join (
SELECT GroupId, COUNT(*) cnt
FROM EnrollmentX
GROUP BY GroupId
) exg on ex.GroupId = exg.GroupId
order by exg.cnt
试一试..
SET @Rank = 0;
SELECT @Rank:=@Rank + 1 rank, EnrollmentX.GroupId,
COUNT(EnrollmentX.StudentId) StudentCnt
FROM EnrollmentX
GROUP BY
EnrollmentX.GroupId
ORDER BY StudentCnt DESC;