mysql - 从 MySQL 中的查询列创建排名列
问题描述
我想在我的查询中建立一个排名列——我在 Stack 上发现了一些类似的案例,但这个有点不同,我不能让它工作。我有一个表 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,则有更多可读选项。如果您想要不同的等级,请更改内部查询中的顺序。
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
推荐阅读
- windows-10 - 通过 CRAN 安装 IRkernel 可以在我的 conda 环境中工作吗?
- selenium-webdriver - 我们如何清除用于 Selenium 自动化的 Internet Explorer 的 cookie
- dialogflow-es - 响应后在谷歌操作中禁用麦克风
- node.js - 完成安装后 IPFS 无法在浏览器上运行
- vim - 在 Vim 中,如何设置在插件加载后运行的自动命令?
- javascript - 如何在 if 语句中使用按钮值和对象值来检查正确答案(进行测验)
- javascript - 如何在每次使用 jQuery 或 javascript 的下午 6:30 之后在 datepicker 中禁用今天的日期
- python - 如何使用正则表达式和精确文字匹配的组合来获取索引值
- popup - 如何在弹出窗口中显示最新数据
- firebase - Flutter_facebook_plugin 上的问题