Group BY vs Partition by в Oracle
Я пишу запрос для извлечения записей из хранилища в Oracle. Его простой запрос выбора с соединениями на нескольких таблицах, и у меня есть несколько столбцов для агрегирования. Поэтому я использую Groupby для остальных столбцов.
скажем, я выбираю около 10 столбцов и из которых 5-агрегированные столбцы. поэтому мне нужно сгруппироваться по другим 5 столбцам. Я даже могу добиться того же, не делая Groupby и используя предложение over (Partition by) для каждого столбца aggregate, который я хочу получить.
Я не уверен, что лучше против склада или вообще.
3 ответов
Они не то же самое.
это вернет 3 строки:
select deptno, count(*) c from emp group by deptno;
DEPTNO C
------ -
10 3
20 5
30 6
это вернет 14:
select deptno, count(*) over (partition by deptno) c from emp;
DEPTNO C
------ -
10 3
10 3
10 3
20 5
20 5
20 5
20 5
20 5
30 6
30 6
30 6
30 6
30 6
30 6
регистрация по этой ссылке Основное различие между агрегатными и аналитическими функциями состоит в том, что хотя аналитические функции дают агрегатный результат, они не группируют результирующий набор. Они возвращают значение группы несколько раз с каждой записью.
С PARTITON BY
это возможно сделать в одном запросе, чтобы получить различные вычисления или группу.
select
DISTINCT deptno, count(*) over (partition by deptno) c,
COUNT(*) OVER (PARTITION BY NULL) AS TOTAL
from emp;