Я пытаюсь написать один запрос (если возможно) для ранжирования идентификаторов на основе нескольких условий.
Мой стол такой:
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, но похоже, что добавление нужного раздела вызывает умножение, поскольку необходимо сгруппировать. Я мог бы написать отдельные запросы для каждого столбца, но я хотел бы избежать, если это возможно.