Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Виклик: Оператор HAVING | Групування
Проміжний SQL

Виклик: Оператор HAVING

Інформаційну систему школи переглядають для забезпечення узгодженості та точності даних. У рамках цього перегляду було поставлено нове завдання з аналізу даних.

Під час планових перевірок було виявлено, що деякі записи про учнів містять більше одного запису оцінки, хоча система призначена для зберігання лише однієї оцінки для кожного учня.

Ваше завдання — допомогти ідентифікувати такі випадки для подальшого внутрішнього розгляду.

Поміркуйте, як це можна зробити. Ви можете почати з того, що розглянете можливість використання WHERE-умови, і це виглядатиме приблизно так:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1

Але, як бачите, з'являється помилка, яка вказує, що не можна використовувати агрегатні функції всередині WHERE-умови. У цьому випадку потрібна конструкція HAVING.

Припустимо, потрібно отримати відділи, у яких середня зарплата співробітників менша за $70,000 на рік. Для цього необхідно використати агрегатну функцію та конструкцію HAVING:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000

У результаті отримуємо один відділ у відповіді за допомогою оператора HAVING, де встановлено умову для стовпця, який використовується для групування.

Note
Примітка

Для використання агрегації даних у операторі HAVING необхідно, щоб у запиті було групування даних. Як і у наведеному вище запиті, ми згрупували дані за стовпцем department.

Нижче наведено більш узагальнений синтаксис оператора HAVING та випадки, коли його доцільно використовувати:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

-- This will cause an error

Ось короткий огляд основної різниці між операторами WHERE та HAVING, а також коли слід використовувати кожен з них:

  1. Оператор WHERE використовується до агрегації даних, тоді як оператор HAVING використовується після агрегації даних;
  2. Оператор WHERE записується до GROUP BY, а оператор HAVINGпісля GROUP BY.

Це дві основні відмінності, які потрібно запам'ятати для успішного використання оператора HAVING. Тепер повернімося до завдання, яке нам дала школа.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 6
single

single

Виклик: Оператор HAVING

Свайпніть щоб показати меню

Інформаційну систему школи переглядають для забезпечення узгодженості та точності даних. У рамках цього перегляду було поставлено нове завдання з аналізу даних.

Під час планових перевірок було виявлено, що деякі записи про учнів містять більше одного запису оцінки, хоча система призначена для зберігання лише однієї оцінки для кожного учня.

Ваше завдання — допомогти ідентифікувати такі випадки для подальшого внутрішнього розгляду.

Поміркуйте, як це можна зробити. Ви можете почати з того, що розглянете можливість використання WHERE-умови, і це виглядатиме приблизно так:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1

Але, як бачите, з'являється помилка, яка вказує, що не можна використовувати агрегатні функції всередині WHERE-умови. У цьому випадку потрібна конструкція HAVING.

Припустимо, потрібно отримати відділи, у яких середня зарплата співробітників менша за $70,000 на рік. Для цього необхідно використати агрегатну функцію та конструкцію HAVING:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000

У результаті отримуємо один відділ у відповіді за допомогою оператора HAVING, де встановлено умову для стовпця, який використовується для групування.

Note
Примітка

Для використання агрегації даних у операторі HAVING необхідно, щоб у запиті було групування даних. Як і у наведеному вище запиті, ми згрупували дані за стовпцем department.

Нижче наведено більш узагальнений синтаксис оператора HAVING та випадки, коли його доцільно використовувати:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

-- This will cause an error

Ось короткий огляд основної різниці між операторами WHERE та HAVING, а також коли слід використовувати кожен з них:

  1. Оператор WHERE використовується до агрегації даних, тоді як оператор HAVING використовується після агрегації даних;
  2. Оператор WHERE записується до GROUP BY, а оператор HAVINGпісля GROUP BY.

Це дві основні відмінності, які потрібно запам'ятати для успішного використання оператора HAVING. Тепер повернімося до завдання, яке нам дала школа.

Завдання

Проведіть, щоб почати кодувати

Деякі студенти з'являються кілька разів у записах про оцінки, що свідчить про дублікати або неочікувані записи в системі.

Потрібно отримати прізвища всіх студентів, у яких у записах є більше однієї оцінки. Результат буде використано адміністрацією школи для перевірки та виправлення даних за потреби.

Повернути лише список прізвищ, які відповідають цій умові, відсортований в алфавітному порядку.

Короткі інструкції

  • Отримати стовпець student_surname.
  • Згрупувати дані за student_surname.
  • Використати оператор HAVING для фільтрації результатів за умовою COUNT(grade) > 1.
  • Відсортувати результати за student_surname.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 6
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt