Presto SQL - ранжирование нескольких условий для нескольких столбцов - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь написать один запрос (если возможно) для ранжирования идентификаторов на основе нескольких условий.

Мой стол такой:

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

Я хотел бы получить каждый отдельный идентификатор и вернуть ранг в зависимости от условий оператора case, но похоже, что добавление нужного раздела вызывает умножение, поскольку необходимо сгруппировать. Я мог бы написать отдельные запросы для каждого столбца, но я хотел бы избежать, если это возможно.

1 Ответ

0 голосов
/ 30 августа 2018

Хочешь что-нибудь подобное?

select t.*,
       dense_rank() over (order by sumg, group),
       dense_rank() over (partition by group order by sumsg, subg),
from (select t.*,
             sum(value) over (partition by group) as sumg,
             sum(value) over (partition by group, subgroup) as sumsg
      from t
     ) t;

Это моя лучшая догадка при интерпретации того, что вы, возможно, захотите.

...