Головна    Статті    Карта    Зв'язок   

Задачі з SQL

лютий 2015

Сontent

Оператор GROUP BY

Завдання

1. Згрупувати значення колонки status в підгрупи.
2. Порахувати кількість замовлень для кожної підгрупи колонки status.

Таблиця orders

orderNumberorderDaterequiredDateshippedDatestatuscommentscustomerNumber
101002003-01-062003-01-132003-01-10ВідвантаженийNULL363
101012003-01-092003-01-182003-01-10ВідвантаженийПеревірити можливість оформлення.17
101022003-01-102003-01-182003-01-10ВідвантаженийНеобхідні додаткові матеріали184
.....................
101112003-03-102003-03-302003-03-10ВідвантаженийNULL453


Декілька слів про оператор GROUP BY

Якщо необхідно згрупувати певні рядки даних в підгрупи застосовується оператор MySQL GROUP BY в SQL-запиті SELECT.
Даний оператор не є обовязковим, в синтаксичному SQL-запиті він повинен застосовуватись після FROM та WHERE.
MySQL GROUP BY має ключовий набір що складається зі списку необхідних колонок, розділених комою чи певного виразу.


Синтаксис MySQL GROUP BY:

SELECT c1,c2,... cn, aggregate_function(expression)
FROM table
WHERE where_conditions
GROUP BY c1, c2, ... cn

Варто відмітити порядок опрацювання виразу SELECT:
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY


Цей порядок дещо не відповідає синтаксичному порядку загального виразу SELECT;

SELECT
    [FROM table_references]
    [WHERE where_condition]
    [GROUP BY]
    [HAVING where_condition]
    [ORDER BY]
    [LIMIT ]


Рішення завдання

Переглянемо приклад застосування оператора MySQL GROUP BY.

1. Згрупувати значення колонки status в підгрупи.

SQL-запит:

SELECT status
FROM orders
GROUP BY status


Результат виконання SQL-запиту:

MySQL GROUP BY

Як видно з результатів запиту результуюча вибірка має різні значення, можна відмітити, що поданий вище SQL-запит схожий з запитом з використаням DISTINCT

SQL-запит:

SELECT DISTINCT status
FROM orders


Агрегатні функції дозволяють виконувати операції над групами даних та повертати одне значення. Найбільш вживаними агрегатними функціями є: SUM, AVG, MAX, MIN та COUNT. Агрегатні функції часто використовуються з оператором MySQL GROUP BY, калькуляція даних виконується для кожної підгрупи.

2. Порахувати кількість замовлень для кожної підгрупи колонки status

SQL-запит:

SELECT DISTINCT status
FROM orders


Результат виконання SQL-запиту:

MySQL GROUP BY