JavaRush/Java курси/Модуль 4. Робота з БД/Просунуте групування

Просунуте групування

Відкрита

1. Оператор HAVING

У SQL є ще один корисний оператор, який застосовується разом з GROUP BY, називається він HAVING.

За своїм змістом він повністю аналогічний оператору WHERE. Тільки WHERE дозволяє встановити фільтр рядків до групування, а за допомогою HAVING можна встановити фільтр, який застосовується до записів вже після групування.

Загальний вигляд запиту під час використання групування та фільтрації результатів групування має вигляд:

SELECT колонки
FROM таблиця
WHERE умова
GROUP BY колонки
HAVING умова

HAVING можна використовувати лише якщо у запиті є GROUP BY.

Давай напишемо запит, де відобразимо кількість найнятих співробітників за роками.

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

І результат такого запиту:

hire_year total
2012 1
2013 1
2014 1
2015 2
2018 1

А тепер виключимо з нього роки, коли найняли одного чи менше співробітників. Приклад:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1

І результат такого запиту:

hire_year total
2015 2

3. Порядок виконання операторів

Щоб писати правильні та ефективні SQL-запити, потрібно розуміти, як вони виконуються SQL-сервером.

Порядок виконання дій є строго регламентованим і не залежить від твого бажання. Ти не можеш переставити оператори місцями та отримати інший порядок.

SQL-запит виконується в кілька етапів у такому порядку.

  1. Етап 1 — вибірка рядків
    • Спочатку вибираються всі рядки із зазначеної таблиці.
    • Потім до них додаються поля, що обчислюються.
    • А потім з усіх рядків залишаються лише ті, які відповідають умові WHERE
  2. Етап 2 — групування
    • Після цього до отриманих результатів застосовується групування.
    • Під час групування обчислюються такі поля як COUNT(*).
    • І нарешті, до результату групування застосовується фільтр HAVING.
  3. Етап 3 — сортування
    • Рядки, отримані на попередніх етапах, сортуються за допомогою ORDER BY.

І нарешті, результат можна обрізати за допомогою LIMIT та OFFSET.

1
Задача
Модуль 4. Робота з БД,  2 рівень4 лекція
Недоступна
Більше одного
task0245
1
Задача
Модуль 4. Робота з БД,  2 рівень4 лекція
Недоступна
Менше 3
task0246
1
Задача
Модуль 4. Робота з БД,  2 рівень4 лекція
Недоступна
Один в полі воїн
task0247
1
Задача
Модуль 4. Робота з БД,  2 рівень4 лекція
Недоступна
2 чи 3
task0248
1
Задача
Модуль 4. Робота з БД,  2 рівень4 лекція
Недоступна
Один бекендер
task0249
1
Задача
Модуль 4. Робота з БД,  2 рівень4 лекція
Недоступна
Одного фронтендера мало
task0250
1
Задача
Модуль 4. Робота з БД,  2 рівень4 лекція
Недоступна
Або 1 або менеджер
task0251
Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.