mysql - mysql对多行特定条件进行排名
问题描述
我有这张桌子
我想根据 cust_id、月份、年份、transaction_no 和输出来对每一行进行排名,但仅针对本例中的特定标准。
标准是相同的 cust_id、月、年。
什么是查询?谢谢你。
解决方案
如果您使用的是 MySQL 8+,那么ROW_NUMBER
可以在这里使用:
SELECT
cust_id,
month,
year,
transaction_no,
ROW_NUMBER() OVER (PARTITION BY cust_id ORDER BY year, month) `rank`
FROM yourTable
ORDER BY
cust_id DESC,
year,
month;
根据您实际想要的确切排名行为(从您的示例数据中不清楚),您可能需要替换ROW_NUMBER
为RANK
或DENSE_RANK
。
编辑:
在 MySQL 5 上,我们或许可以使用相关计数查询来查找排名数字:
SELECT
cust_id,
month,
year,
transaction_no,
(SELECT COUNT(*)
FROM yourTable t2
WHERE t2.cust_id = t1.cust_id AND
(t2.year < t1.year OR t2.year = t1.year AND t2.month <= t1.month)) `rank`
FROM yourTable t1
ORDER BY
cust_id DESC,
year,
month;
这种方法可以假设,对于每个cust_id
,year
和month
值组合总是唯一的。
推荐阅读
- python - mosquitto 代理在接收 MQTT 连接数据包时出错(python)
- python - 有没有更有效的方法来更新 tkinter 上的标签?
- django - 由于我的 html 模板,django is_valid() 返回 false 且没有错误
- c# - 为什么这个带有反射语句的 linq 会击败我编译的表达式树?
- python - Python顶层for循环只运行一次而不是遍历列表
- voiceover - 如何点击链接在mac画外音中听到它?
- python - 有没有办法让 Numba 不要尝试编译函数的特定行?
- r - Rstudio- 删除依赖 rJava 和 xlsx
- asp.net-core - ASP.NET 核心 3.1:将类库添加到 Project_MissingMethodException:找不到方法:'Boolean Microsoft.EntityFrameworkCore.Migrations
- python - 用另一列内的列名重塑数据框