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