3.1 Операция GROUP BY

Езикът SQL е много мощен. В допълнение към простото извличане на данни, той ви позволява да групирате данни по време на заявка. Например, искаме да знаем колко вида продукти от всяка марка имаме, How можем да направим това?

Има специален оператор за това GROUP BY, ето How се пише.

GROUP BY column

Нека напишем заявка, която иска от SQL да покаже броя на видовете продукти за всяка марка. Такава заявка би изглеждала така:

SELECT brand, COUNT(*)
FROM product
GROUP BY brand

Ще получите следния резултат от заявката:

марка броя(*)
(НУЛА) 2
Bosch 4
ИКЕА 6
LG 2
Smartflower 1

Нека внимателно анализираме Howва заявка сме написали и Howъв резултат сме получor. В резултат на това виждаме две колони. Първият със списък от марки, което е логично. Искахме да получим нещо като набор от двойки "марка --> количество" .

Моля, обърнете внимание, че сред имената на марките има дума NULL. Наистина имаме продукти в марката, в която е изписано NULLи ги виждаме тук. Малко неочаквано, но полезно. Виждаме колко небрандирани продукти има.

Сега нека разгледаме по-отблизо заявката. Искахме да знаем броя на продуктите на всяка марка, затова написахме GROUP BY brand, а в SELECTнаписахме марката и изразаCOUNT(*)

COUNT(*)е така наречената агрегатна функция, която се изпълнява върху група редове. В нашия случай тя просто брои техния брой. Има много такива функции и ще ги разгледаме малко по-късно.

3.2 Сложни заявки с GROUP BY

Сега нека напишем заявка, при която първо изхвърляме продукти, чиято цена е под 10, и след това ги групираме. Такава заявка би изглеждала така:

SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand

Ще получите следния резултат от заявката:

марка броя(*)
Bosch 4
ИКЕА 5
LG 2
Smartflower 1

Всички NULL продукти изчезнаха от нашата table с резултати, тъй като бяха много евтини, а броят на продуктите на IKEA намаля с 1. От 6 на 5.

Това предполага първо да приложите WHEREжеланите редове за филтриране и едва след това да приложите групирането към резултата.

3.3 Имена на колони на резултата

Между другото, можете да дадете имена на получените колони. Вижте How сървърът предложи името count(*)? Нека го заменим с общо. Такава заявка би изглеждала така:

SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand

Ще получите следния резултат от заявката:

марка обща сума
Bosch 4
ИКЕА 5
LG 2
Smartflower 1

Можете също да преименувате съществуващи колони. Нека вземем една от използваните преди заявки и добавим нови имена към колоните.

SELECT
id AS  product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL

Ще получите следния резултат от заявката:

идентификация на продукта Име на продукта цена
2 Председател 5.00
8 Лампа 15.00 часа