Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Клаузула Having | Групування
Розширений Рівень SQL

bookКлаузула Having

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

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

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

Давайте разом подумаємо, як це можна зробити. Можна почати з припущення, що це можна виконати за допомогою оператора WHERE, і це виглядало б приблизно так:

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

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

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

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

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

Note
Примітка

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

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

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

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

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

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

Завдання

Swipe to start coding

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

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

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

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

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

Рішення

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

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

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

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

single

Запитати АІ

expand

Запитати АІ

ChatGPT

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

Suggested prompts:

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?

close

bookКлаузула Having

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

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

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

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

Давайте разом подумаємо, як це можна зробити. Можна почати з припущення, що це можна виконати за допомогою оператора WHERE, і це виглядало б приблизно так:

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

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

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

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

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

Note
Примітка

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

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

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

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

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

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

Завдання

Swipe to start coding

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

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

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

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

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

Рішення

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

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

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

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

single

some-alt