2013-05-07 2 views
0

Я пытаюсь создать сводный запрос, который возвращает сумму количества для каждой группы вместе с описанием из строки с наибольшим количеством в этой группе.Oracle SQL: получить сумму и значение из строки в группе на основе значения другого столбца

Например, если таблица выглядит следующим образом:

GROUP QTY DESC 
----- --- ---- 
1  23 CCC 
1  42 AAA 
1  61 BBB 

2  11 ZZZ 
2  53 XXX 
2  32 YYY 

Запрос будет возвращать:

1  125 BBB (desc from row with largest qty for group 1) 
2  95 XXX (desc from row with largest qty for group 2) 

Спасибо!

ответ

0

Функция окна row_number() является вашим другом для этого типа запросов. Он присваивает порядковый номер значениям. Вы можете использовать эту информацию в совокупности:

select group, sum(qty), max(case when seqnum = 1 then desc end) 
from (select t.*, 
      row_number() over (partition by group order by qty desc) as seqnum 
     from t 
    ) t 
group by group 

Кстати, group и desc паршивые имена столбцов, потому что они вступают в противоречие с зарезервированными словами. Вы должны переименовать их или заключить в двойные кавычки в запросе.