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;