Выберите идентификатор подкатегории для связи с основным идентификатором на основе наибольшей суммы - PullRequest
0 голосов
/ 02 мая 2018

У меня есть основной идентификатор ID1 и дополнительный идентификатор ID2. ID1 может быть связан с несколькими значениями ID2, и наоборот. Я хочу суммировать третий столбец значений по ID2 под каждым ID1 и потянуть ID2 с наибольшей суммой. Исходные данные структурированы как:

ID1     ID2     Value
1       10      1
1       10      2
1       20      1
2       10      1
2       30      2

И я хочу, чтобы конечные результаты выглядели так:

ID1     ID2
1       10
2       30

Пока у меня есть только неработающий запрос:

SELECT  ID1,
        CASE    WHEN ID2_Value = MAX(ID2_Value) THEN ID2
                ELSE NULL
                END AS PrimaryID2
FROM (  SELECT  ID1,
                ID2,
                SUM(Value) AS ID2_Value
        FROM SOME_SCHEMA
        GROUP BY ID1, ID2
       ) AS ID2_Value
GROUP BY ID1;

Мой запрос сейчас не работает, потому что он ожидает, что я включу ID2_Value в оператор GROUP BY, но я не хочу группировать по этим значениям.

1 Ответ

0 голосов
/ 02 мая 2018

Я бы использовал row_number():

select id1, id2
from (select id1, id2, sum(value) as sumv,
             row_number() over (partition by id1 order by sum(value) desc) as seqnum
      from t
      group by id1, id2
     ) t
where seqnum = 1;
...