4.1 Групиране на колони
Това, което също е много важно е, че ако групирате записи, тогава в секцията SELECT
можете да посочите само колоните, по които се групират данните.
Виене моганапишете заявка за тип и посочете SELECT
колоната с име в секцията :
SELECT brand, name
FROM product
GROUP BY brand
Имате куп редове в tableта с продукти с полето за име и не е ясно кой ред трябва да замените тук. Помислете отново: искате ли да знаете броя на продуктите на всяка марка и How получената table може да получи името на продукта?
Ако използвате оператора GROUP BY
, тогава нормалните редове не могат да влязат във вашия резултат, а само колони, по които са групирани данните и „изчислени колони“, като напр.COUNT(*)
4.2 Групиране по изчислени колони
Но можете да групирате по множество колони и дори по изчислени колони. Пример:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
И резултатът от тази заявка:
година на наем | обща сума |
---|---|
2012 г | 1 |
2013 | 1 |
2014 г | 1 |
2015 г | 2 |
2018 г | 1 |
Нека анализираме нашето искане.
В tableта на служителите всеки служител има уникална дата на наемане, така че групирането на данни по нея няма да работи - ще има един запис за всяка дата и групирането няма да има много смисъл. Но ако преминем от датата на наемане към годината на наемане, тогава може да е ситуация, при която компанията е наела няколко служители през една и съща година.
Нека да видим отново How ще изглежда тази table преди групирането:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
join_date
FROM employee
И резултатът от тази заявка:
document за самоличност | име | година на наем | дата на присъединяване |
---|---|---|---|
1 | Ivanов Ivan | 2012 г | 2012-06-30 |
2 | Peterов Петър | 2013 | 2013-08-12 |
3 | Ivanов Сергей | 2014 г | 2014-01-01 |
4 | Рабинович Мойша | 2015 г | 2015-05-12 |
5 | Кириенко Анастасия | 2015 г | 2015-10-10 |
6 | Васка | 2018 г | 2018-11-11 |
Но тази получена table може да бъде групирана по hire_year и да разберете колко хора са бor наети през определена година.
4.3 Групиране по няколко колони
Сега нека се опитаме да разберем колко служители сме наели през всеки месец от всяка година. За да направим това, трябва да добавим не едно, а две изчислими полета към заявката наведнъж - годината на наемане (hire_year) и месеца на наемане (hire_month).
Нека напишем заявка като тази:
SELECT
id,
name,
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
join_date
FROM employee
И резултатът от тази заявка:
document за самоличност | име | година на наем | наем_месец | дата на присъединяване |
---|---|---|---|---|
1 | Ivanов Ivan | 2012 г | 6 | 2012-06-30 |
2 | Peterов Петър | 2013 | 8 | 2013-08-12 |
3 | Ivanов Сергей | 2014 г | 1 | 2014-01-01 |
4 | Рабинович Мойша | 2015 г | 5 | 2015-05-12 |
5 | Кириенко Анастасия | 2015 г | 10 | 2015-10-10 |
6 | Васка | 2018 г | единадесет | 2018-11-11 |
Ако групираме данните в тази table с резултати по месеци, тогава просто групираме хората в групи, независимо от годината, в която са бor наети. И имаме нужда получената table да има три колони: година, месец и брой наети служители.
За да направите това, след оператора GROUP BY
трябва да използвате името не на една колона, а на две. Пример:
SELECT
YEAR(join_date) AS hire_year,
MONTH(join_date) AS hire_month,
COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month
И резултатът от тази заявка:
година на наем | наем_месец | обща сума |
---|---|---|
2012 г | 6 | 1 |
2013 | 8 | 1 |
2014 г | 1 | 1 |
2015 г | 5 | 1 |
2015 г | 10 | 1 |
2018 г | единадесет | 1 |
Имаме малко записи в tableта, така че има единици навсякъде в общата колона. И между другото, имайте предвид, че по колкото повече колони групираме, толкова повече редове имаме в резултата.
GO TO FULL VERSION