【发布时间】:2019-02-04 19:42:58
【问题描述】:
我正在尝试编写一个查询(如果可能)来根据多个条件对 id 进行排名。
我的桌子是这样的:
id group subgroup value
1 A Q 12
2 A Z 10
3 B Z 14
4 A Z 20
5 B W 20
我试过这个查询:
SELECT id,
CASE WHEN group = 'A' THEN ROW_NUMBER() OVER (PARTITION BY group ORDER BY SUM(value) DESC) AS rank_group
CASE WHEN group = 'A' AND subgroup = 'Z' THEN ROW_NUMBER() OVER (PARTITION BY group, subgroup ORDER BY SUM(value) DESC) AS rank_subgroup
FROM table
GROUP BY group, subgroup
但结果是这样的:
id rank_group rank_subgroup
1 1 1
1 2 2
我想获取每个不同的 id 并根据 case 语句的条件返回排名,但看起来添加所需的分区会导致乘法,因为 group by 是必要的。我可以为每一列编写单独的查询,但我想尽可能避免。
【问题讨论】:
-
编辑您的问题并提供您想要的结果。排名与
group by有什么关系?这个问题没有意义。