Използване на група по за няколко колони

Разбирам смисъла на GROUP BY x

Но как работи GROUP BY x, y и какво означава?

Решение

Групиране по X означава да поставите всички с еднаква стойност за X в една група.

Групиране по 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

Ако трябва да групираме по две колони:

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")

Надявам се, че това има смисъл.

Коментари (7)

Клаузата GROUP BY се използва в комбинация с функциите за агрегиране, за да се групира наборът от резултати по една или повече колони:

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

Запомнете този ред:

  1. SELECT (използва се за избор на данни от базата данни)

  2. FROM (клаузата се използва за изброяване на таблиците)

  3. WHERE (клаузата се използва за филтриране на записи)

  4. GROUP BY (клауза може да се използва в SELECT изявление за събиране на данни) в множество записи и да се групират резултатите по една или повече колони)

  5. HAVING (клауза се използва в комбинация с клаузата GROUP BY, за да ограничаване на групите от върнати редове само до тези, за които е изпълнено условието е TRUE)

  6. ORDER BY (ключова дума се използва за сортиране на набора от резултати)

Можете да използвате всички тези функции, ако използвате функции за агрегиране, и това е редът, в който те трябва да бъдат зададени, в противен случай може да получите грешка.

Агрегиращите функции са:

MIN връща най-малката стойност в дадена колона

SUM връща сумата на числовите стойности в дадена колона

AVG връща средната стойност на дадена колона

COUNT връща общия брой стойности в дадена колона

COUNT(*) връща броя на редовете в дадена таблица

Коментари (3)