Мы можем взять простой пример.
Рассмотрим таблицу с именами TableA
со следующими значениями:
id firstname lastname Mark
-------------------------------------------------------------------
1 arun prasanth 40
2 ann antony 45
3 sruthy abc 41
6 new abc 47
1 arun prasanth 45
1 arun prasanth 49
2 ann antony 49
GROUP BY
Предложение SQL GROUP BY можно использовать в операторе SELECT для сбора данных по нескольким записям и группировки результатов по одному или нескольким столбцам.
В более простых словах оператор GROUP BY используется вместе с агрегатными функциями для группировки набора результатов по одному или нескольким столбцам.
Синтаксис:
SELECT expression1, expression2, ... expression_n,
aggregate_function (aggregate_expression)
FROM tables
WHERE conditions
GROUP BY expression1, expression2, ... expression_n;
Мы можем применить GROUP BY
в нашей таблице:
select SUM(Mark)marksum,firstname from TableA
group by id,firstName
Результаты:
marksum firstname
----------------
94 ann
134 arun
47 new
41 sruthy
В нашей реальной таблице у нас есть 7 строк, и когда мы применяем GROUP BY id
, сервер группирует результаты на основе id
:
Простыми словами:
здесь GROUP BY
обычно уменьшается количество возвращаемых строк путем их сворачивания и вычисления Sum()
для каждой строки.
PARTITION BY
Прежде чем перейти к PARTITION BY, давайте посмотрим на OVER
предложение:
Согласно определению MSDN:
Предложение OVER определяет окно или заданный пользователем набор строк в наборе результатов запроса. Затем оконная функция вычисляет значение для каждой строки в окне. Вы можете использовать предложение OVER с функциями для вычисления агрегированных значений, таких как скользящие средние, кумулятивные агрегаты, промежуточные итоги или максимальный N для каждой группы результатов.
PARTITION BY не уменьшит количество возвращаемых строк.
Мы можем применить PARTITION BY в нашем примере таблицы:
SELECT SUM(Mark) OVER (PARTITION BY id) AS marksum, firstname FROM TableA
Результат:
marksum firstname
-------------------
134 arun
134 arun
134 arun
94 ann
94 ann
41 sruthy
47 new
Посмотрите на результаты - он разделит строки и вернет все строки, в отличие от GROUP BY.