1. Оператор GROUP BY
Мова SQL дуже потужна. Окрім простої вибірки даних, вона дозволяє виконувати групування даних під час запиту. Наприклад, ми хочемо дізнатися, скільки видів продуктів кожного бренду у нас є: як нам це зробити?
Для цього є спеціальний оператор GROUP BY
. Ссь як він пишеться.
GROUP BY колонка
Давай створимо запит, за допомогою якого попросимо SQL відобразити кількість видів товарів кожного бренду. Виглядатиме такий запит приблизно так:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
Ти отримаєш такий результат запиту:
brand | count(*) |
---|---|
(NULL) | 2 |
Bosch | 4 |
IKEA | 6 |
LG | 2 |
SmartFlower | 1 |
Давай уважно розберемо, що за запит ми написали і що за результат отримали. В результаті ми бачимо дві колонки. Перша — зі списком брендів, що логічно. Ми й хотіли отримати щось на кшталт набору пар "бренд --> кількість".
Зверни увагу, що серед імен брендів є слово NULL
. Дійсно, у нас є продукти в бренді, в який записано NULL
, і ми їх тут бачимо. Трохи несподівано, але корисно. Ми можемо бачити, скільки є продуктів без бренду.
Тепер уважно подивимося на запит. Ми хотіли дізнатися кількість продуктів кожного бренду, тому написали GROUP BY brand
, а в SELECT
написали brand та вираз COUNT(*)
COUNT(*)
— це так звана агрегатна функція, яка виконується над групою рядків. У нашому випадку вона просто рахує їхню кількість. Таких функцій дуже багато, і ми розглянемо їх трохи згодом.
2. Складні запити з GROUP BY
Тепер давай напишемо запит, де спочатку відкинемо продукти, ціна яких менша за 10, а потім згрупуємо їх. Виглядатиме такий запит приблизно так:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
Ти отримаєш такий результат запиту:
brand | count(*) |
---|---|
Bosch | 4 |
IKEA | 5 |
LG | 2 |
SmartFlower | 1 |
З нашої таблиці результатів зникли всі NULL-продукти, оскільки вони були дуже дешеві, а також кількість IKEA продуктів зменшилася на 1. Було 6, а стало 5.
Це говорить про те, що ти спочатку застосовуєш WHERE
для фільтрації потрібних рядків, а вже потім — до отриманого результату застосовуєте угруповання.
3. Імена колонок у результату
До речі, ти можеш вказувати імена для результуючих колонок. Бачиш, як ім'я останньої колонки сервер запропонував count(*)
? Давай замінимо його на total. Виглядатиме запит приблизно так:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
І ти отримаєш такий результат запиту:
brand | total |
---|---|
Bosch | 4 |
IKEA | 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
Отримаєш такий результат запиту:
product_id | product_name | price |
---|---|---|
2 | Стілець | 5.00 |
8 | Лампа | 15.00 |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ