Мы можем взять простой пример.
Рассмотрим таблицу с именем 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.