如果您正在运行MySQL 8.0,则可以使用聚合和窗口函数rank()
进行此操作
我需要为我应该执行的任务提供帮助。我有一张桌子,其中包含以下字段:
每个用户名可以多次出现在表中,因此他可以得到多个分数。无论如何,用户名只能与一个国家/地区关联。
下面是我的表格示例:
Username !! Country || Score
Bob ! Italy ! 100
Bob ! Italy ! 150
Christian ! Italy ! 500
Christian ! Italy ! 200
Fred | Germany | 80
Carl | Germany | 700
Charlie | France | 400
Charlie | France | 280
Jean | France | 90
[我将得到一个MYSQL命令,以仅考虑他的最高得分并舍弃其他得分来获得他所在国家/地区中每个用户的排名。
因此,我的理想输出应为:
基督教徒在意大利排名第一鲍勃在意大利排名第二卡尔在德国排名第一[]
弗雷德在德国排名第二]
查理在法国排名第一吉恩在法国排名第二[]
我可以订购用户并确定他们的等级,但要输入所有条目。我想拥有的只是分数最高的排名。
非常感谢您的帮助,
非常感谢
我需要为我应该执行的任务提供帮助。我有一个表格,其中包含以下字段:用户名得分竞争每个用户名可以多次出现在表格中,因此...
如果您正在运行MySQL 8.0,则可以使用聚合和窗口函数rank()
进行此操作
select
username,
country,
max(score) top_score,
rank() over(partition by country order by max(score) desc) country_rank
from mytable
group by username, country
order by country, country_rank
可以做到这一点的一种方法是:
SELECT o1.Username, o1.Country, o1.maxScore,
(SELECT COUNT(DISTINCT s2.Username)
FROM `scores` s2
WHERE o1.Country = s2.Country AND s2.Score > o1.maxScore) + 1 AS ranking
FROM (
SELECT Username, Country, MAX(Score) AS maxScore
FROM `scores` s1
GROUP BY Username) o1
此作者:
MAX(Score) AS maxScore
)中看到由于MAX(Score) AS maxScore
是汇总结果,我们不能在1个查询中直接使用subQuery,但首先我们必须汇总结果并使用所得的最大分数。
如果您正在运行MySQL 8.0,则可以使用聚合和窗口函数rank()
进行此操作
可以做到这一点的一种方法是:
SELECT o1.Username, o1.Country, o1.maxScore,
(SELECT COUNT(DISTINCT s2.Username)
FROM `scores` s2
WHERE o1.Country = s2.Country AND s2.Score > o1.maxScore) + 1 AS ranking
FROM (
SELECT Username, Country, MAX(Score) AS maxScore
FROM `scores` s1
GROUP BY Username) o1