Використання групи за кількома стовпцями


1035

Я розумію сенс GROUP BY x

Але як GROUP BY x, yпрацює, і що це означає?


2
Ви не знайдете його описаним, як це питання задає. Становище GROUP BY може приймати одне або кілька полів. ГРУПА ПО КЛІЄНТУ; ГРУПИ ЗА ПІБ, ім'я; ГРУПА за роком, магазин, ску тощо
Білл

Відповіді:


2025

Group By Xозначає помістити всіх, хто має однакове значення для X, в одну групу .

Group By X, Yозначає помістити всіх, хто має однакові значення для X і Y в одну групу .

Для ілюстрації на прикладі, скажімо, у нас є наступна таблиця, що стосується того, хто відвідує який предмет в університеті:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

Якщо ви використовуєте group byлише стовпчик теми; сказати:

select Subject, Count(*)
from Subject_Selection
group by Subject

Ви отримаєте щось на кшталт:

Subject    Count
------------------------------
ITB001     5
MKB114     2

... тому що є 5 записів для ITB001 і 2 для MKB114

Якби ми були до group byдвох стовпців:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

ми отримаємо це:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

Це тому, що, коли ми групуємось за двома стовпцями, він говорить «Згрупуйте їх так, щоб усі ті, хто має однаковий предмет і семестр, були в одній групі, а потім обчислили всі сукупні функції ( підрахунок , сума, середнє значення тощо). ) для кожної з цих груп " . У цьому прикладі це демонструється тим, що, коли ми їх порахуємо, троє людей, які роблять ITB001 в семестрі 1, і двоє, які роблять це в семестрі 2. Обидва люди, які роблять MKB114, перебувають у 1 семестрі, тому немає рядок для семестру 2 (дані не входять до групи "MKB114, семестр 2")

Сподіваємось, це має сенс.


11
@Smashery: Так це також означає, що GROUP BY A,Bце те саме, що GROUP BY B,A?
tumchaaditya

23
Так. Я не можу сказати напевно, наскільки вони ефективні між собою, але вони дадуть такий же результат, так.
Smashery

2
Тут Може слід додати , що є різниця між GROUP BY a, bі GROUP BY a AND bоскільки другим тільки списками згрупованих елементів з точно таким же змістом і немає «undergroups». У цьому випадку вихід буде таким же, як перший.
Dwza

5
Хочу додати, що порядок, в якому ви групуєте за стовпцями, значення не має. У наведеному вище прикладі групи за семестром Subject дав би такий же результат
user2441441

2
ну, згрупуйте по a, b і групи по b, a НЕ повертайте однаковий результат - рядки відображаються в іншому порядку
фанни

33

GROUP BYПропозиція використовується в поєднанні з агрегатними функціями для угруповання безлічі результатів з допомогою одного або більше стовпців. наприклад:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

Запам'ятайте це замовлення:

1) SELECT (використовується для вибору даних із бази даних)

2) ВІД (пункт використовується для переліку таблиць)

3) ДЕ (пункт використовується для фільтрації записів)

4) GROUP BY (пункт може використовуватися в операторі SELECT для збору даних по декількох записах і групування результатів по одному або більше стовпців)

5) HAVING (пункт використовується в поєднанні з пунктом GROUP BY, щоб обмежити групи повернутих рядків лише тим, у кого умова - ІСТИНА)

6) ORDER BY (ключове слово використовується для сортування набору результатів)

Ви можете використовувати все це, якщо ви використовуєте сукупні функції, і це є порядок їх встановлення, інакше ви можете отримати помилку.

Функціями сукупності є:

MIN повертає найменше значення в заданому стовпці

SUM повертає суму числових значень у заданому стовпці

AVG повертає середнє значення даного стовпця

COUNT повертає загальну кількість значень у заданому стовпці

COUNT (*) повертає кількість рядків у таблиці


1
але куди ми ставимо 2 стовпчики, як об’єднати на основі 2 / більше стовпців - питання
Чайтанія Бапат

Привіт Чайтанья, я не знаю, чи це ти просиш, але дозвольте навести лише декілька прикладів. Якщо у вас є таблиця продуктів, ви використовуєте агреговані функції таким чином, нижче наведено два сценарії: ВИБІРТЕ AVG (інвентар) ВІД продуктів; Це дозволить розрахувати середні одиниці на складі таблиці продуктів. Тепер ви хочете обчислити одиниці на складі за категорією товару, ви повинні використовувати функцію AVG з пунктом GROUP BY таким чином: SELECT categoryId, AVG (instock) ВІД продуктів GROUP GROUP категоріяId;
С. Майоль

Це навіть не дає віддаленої відповіді на питання ... Питання тут полягає в тому, як домогтися одночасного "прикореневого групування" "предмета" та "семестру", як пояснено у наведеному прикладі ...
MahNas92
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.