我需要找出客户的等级。在这里,我为我的要求添加了相应的 ANSI 标准 SQL 查询。请帮我把它转换成 MySQL 。
SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person
是否有任何功能可以在 MySQL 中找出排名?
原文由 Aadi 发布,翻译遵循 CC BY-SA 4.0 许可协议
在对丹尼尔的回答进行调整时,一些 MySQL 版本在 IF 语句中抛出错误
SELECT first_name,
age,
gender,
(IF(age=@_last_age,@curRank:=@curRank,@curRank:=@_sequence)) AS `rank`,
@_sequence:=@_sequence+1,@_last_age:=age
FROM person p, (SELECT @curRank := 1, @_sequence:=1, @_last_age:=0) r
ORDER BY age;
所以我不得不用大括号将 IF 条件测试包装在排名中
这仅计算排名但不计算 Dense_rank
原文由 NINSIIMA WILBER 发布,翻译遵循 CC BY-SA 4.0 许可协议
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.2k 阅读✓ 已解决
2 回答2k 阅读
一种选择是使用排名变量,例如:
(SELECT @curRank := 0)
部分允许变量初始化,而不需要单独的SET
命令。测试用例:
结果: