WITH test_data AS (
SELECT 1 key, 1 a, 2 b FROM dual UNION ALL --# Lowest a for key=1
SELECT 1 key, 2 a, 1 b FROM dual UNION ALL
SELECT 2 key, 3 a, 3 b FROM dual UNION ALL --# Lowest a for key=2, lowest b
SELECT 2 key, 3 a, 4 b FROM dual UNION ALL
SELECT 2 key, 4 a, 5 b FROM dual
)
Я пытаюсь сгруппировать по key
и получить наименьший a
и соответствующий b
(наименьший b
в случае связей) плюс сумму b
с.:
KEY A FIRST_B SUM_B
---------- ---------- ---------- ----------
1 1 2 3
2 3 3 12
Я могу реализовать это с помощью дополнительного выбора
SELECT key, MIN(a) AS a, first_b, SUM(b) AS sum_b
FROM (
SELECT key, a, b,
FIRST_VALUE(b) OVER (PARTITION BY key ORDER BY a, b) AS first_b
FROM test_data
)
GROUP BY key, first_b
, но мне интересно, есть ли способ избежать этого выбора, что-то вроде
SELECT key, a, SUM(b) AS sum_b,
MIN( FIRST_VALUE(b) OVER (PARTITION BY key ORDER BY a, b) ) AS first_b
FROM test_data
GROUP BY key, a
который вызывает ORA-30483: здесь не разрешены оконные функции
Заранее спасибо, Питер