Клаузула 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)
Давайте також коротко розглянемо основну різницю між операторами WHERE та HAVING, а також коли слід використовувати кожен з них:
- Оператор
WHEREвикористовується до агрегування даних, тоді як операторHAVINGзастосовується після агрегування даних; - Оператор
WHEREзаписується доGROUP BY, а операторHAVING— післяGROUP BY.
Це дві основні відмінності, які потрібно запам'ятати для успішного використання оператора HAVING. Тепер повернемося до завдання, яке нам поставила школа.
Swipe to start coding
Деякі студенти з'являються у записах про оцінки кілька разів, що свідчить про дублікати або неочікувані записи в системі.
Потрібно отримати прізвища всіх студентів, у яких у записах міститься більше однієї оцінки. Результат буде використано адміністрацією школи для перевірки та, за необхідності, виправлення даних.
Поверніть лише список прізвищ, які відповідають цій умові, відсортований в алфавітному порядку.
Короткі інструкції
- Отримати стовпець
student_surname. - Згрупувати дані за
student_surname. - Використати оператор
HAVINGдля фільтрації результатів за умовоюCOUNT(grade) > 1. - Відсортувати результати за
student_surname.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you show me how to use the HAVING clause to find students with multiple grade entries?
Can you explain why the HAVING clause works in this scenario but WHERE does not?
Can you provide an example query for the school task using HAVING?
Чудово!
Completion показник покращився до 4
Клаузула 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)
Давайте також коротко розглянемо основну різницю між операторами WHERE та HAVING, а також коли слід використовувати кожен з них:
- Оператор
WHEREвикористовується до агрегування даних, тоді як операторHAVINGзастосовується після агрегування даних; - Оператор
WHEREзаписується доGROUP BY, а операторHAVING— післяGROUP BY.
Це дві основні відмінності, які потрібно запам'ятати для успішного використання оператора HAVING. Тепер повернемося до завдання, яке нам поставила школа.
Swipe to start coding
Деякі студенти з'являються у записах про оцінки кілька разів, що свідчить про дублікати або неочікувані записи в системі.
Потрібно отримати прізвища всіх студентів, у яких у записах міститься більше однієї оцінки. Результат буде використано адміністрацією школи для перевірки та, за необхідності, виправлення даних.
Поверніть лише список прізвищ, які відповідають цій умові, відсортований в алфавітному порядку.
Короткі інструкції
- Отримати стовпець
student_surname. - Згрупувати дані за
student_surname. - Використати оператор
HAVINGдля фільтрації результатів за умовоюCOUNT(grade) > 1. - Відсортувати результати за
student_surname.
Рішення
Дякуємо за ваш відгук!
single