故事:
我正在尝试按国家和游戏获取记录总数和最大日期,以及另一个根据记录总数对排名最高的国家进行排名的列:
select id,country,game,sum(records) as records,max(date) as max_date
from table
group by id,game
国家排名栏给我添麻烦了。这是我尝试过的:
ROW_NUMber() OVER(PARTITION BY id,country ORDER BY SUM(records) DESC) as rn
它所做的只是按照我的期望按国家/地区对每行分区进行排名。
客观
是否有一种方法可以在一个或两个子查询中实现我想要的?
这是所需的输出
+----+---------+--------------+---------+------------+------+
| id | country | game | records | max_date | rank |
+----+---------+--------------+---------+------------+------+
| 2 | usa | wow | 10 | 2019-01-01 | 1 |
| 2 | usa | wakfu | 15 | 2019-01-01 | 1 |
| 2 | usa | clash royale | 30 | 2019-01-01 | 1 |
| 2 | germany | dofus | 9 | 2019-01-01 | 2 |
+----+---------+--------------+---------+------------+------+
在ID#2中,美国(美国)排名第一,因为其所有游戏的记录总和。
对于以下评论的请求:
原始数据如下:
+----+---------+--------------+---------+------------+--+
| id | country | game | records | max_date | |
+----+---------+--------------+---------+------------+--+
| 2 | usa | wow | 2 | 2018-12-01 | |
| 2 | usa | wow | 5 | 2018-12-05 | |
| 2 | usa | wow | 1 | 2018-12-10 | |
| 2 | usa | wow | 2 | 2019-01-01 | |
| 2 | usa | wakfu | 10 | 2018-12-10 | |
| 2 | usa | wakfu | 5 | 2019-01-01 | |
| 2 | usa | clash royale | 30 | 2019-01-01 | |
| 2 | germany | dofus | 2 | 2018-05-01 | |
| 2 | germany | dofus | 4 | 2018-07-01 | |
| 2 | germany | dofus | 3 | 2019-01-01 | |
+----+---------+--------------+---------+------------+--+