single
Клаузула Having
Свайпніть щоб показати меню
Система управління інформацією про школу проходить перевірку для забезпечення узгодженості та точності даних. У рамках цієї перевірки поставлено нове завдання з аналізу даних.
Під час планових перевірок було виявлено, що деякі записи про учнів містять більше одного запису про оцінку, хоча система призначена для зберігання лише однієї оцінки для кожного учня.
Ваше завдання — допомогти виявити такі випадки для подальшого внутрішнього розгляду.
Подумайте, як це можна зробити. Ви можете почати з того, що розглянете можливість використання WHERE-умови, і це виглядатиме приблизно так:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Але, як ви бачите, з'являється помилка, яка вказує, що не можна використовувати агрегатні функції всередині WHERE-умови. У такому випадку потрібна конструкція HAVING.
Припустимо, потрібно отримати відділи, у яких середня зарплата співробітників менша за $70 000 на рік.
Для цього необхідно використати агрегатну функцію та конструкцію HAVING:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Результатом є один відділ у відповіді з використанням оператора HAVING, де встановлено умову для стовпця, за яким виконувалось групування.
Для використання агрегації даних у операторі HAVING необхідно, щоб у запиті було групування даних. Як у наведеному вище запиті, дані були згруповані за стовпцем department.
Нижче наведено більш узагальнений синтаксис оператора HAVING та випадки, коли його доцільно використовувати:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
-- This will cause an error
Ось короткий огляд основної різниці між операторами WHERE та HAVING, а також коли слід використовувати кожен з них:
- Оператор
WHEREвикористовується до агрегації даних, тоді як операторHAVINGвикористовується після агрегації даних; - Оператор
WHEREзаписується доGROUP BY, а операторHAVING— післяGROUP BY.
Це дві основні відмінності, які потрібно запам'ятати для успішного використання оператора HAVING. Тепер повернімося до завдання, яке нам дала школа.
Проведіть, щоб почати кодувати
Деякі студенти з'являються кілька разів у записах про оцінки, що свідчить про дублікати або неочікувані записи в системі.
Потрібно отримати прізвища всіх студентів, у яких у записах міститься більше одного оцінювання. Результат буде використано адміністрацією школи для перевірки та виправлення даних за потреби.
Поверніть лише список прізвищ, які відповідають цій умові, відсортований в алфавітному порядку.
Короткі інструкції
- Отримати стовпець
student_surname. - Згрупувати дані за
student_surname. - Використати оператор
HAVINGдля фільтрації результатів за умовоюCOUNT(grade) > 1. - Відсортувати результати за
student_surname.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат