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
с:Получение наименьшие значения в GROUP BY
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: оконные функции здесь не допускается
Заранее спасибо, Питер
Есть Есть особая причина, почему вы нужно избегать подвыборки? Это то, что у вас недостаточно. –
@MatthewWatson: Прямо сейчас, производительность не проблема. Запрос довольно сложный, и повторная ввод всех выбранных столбцов подвыборки - это то, что я пытался избежать по соображениям удобочитаемости. –
Создайте для этого представление или используйте псевдоним. * Вы хотите все столбцы. Я сомневаюсь, что любые фанковые решения станут более читаемыми. –