Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Клаузула Having | Групування
SQL Середнього Рівня
Секція 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