我需要找出客户的等级。在这里,我为我的要求添加了相应的 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 许可协议
4 回答1.5k 阅读✓ 已解决
8 回答1.3k 阅读
3 回答963 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.8k 阅读
2 回答1.7k 阅读
1 回答901 阅读✓ 已解决
一种选择是使用排名变量,例如:
(SELECT @curRank := 0)
部分允许变量初始化,而不需要单独的SET
命令。测试用例:
结果: