Клаузула 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
, де задали умову для стовпця, за яким групували дані.
Note
Для використання агрегації даних у операторі
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
Ваше завдання — отримати прізвища студентів, які мають декілька оцінок у школі.
Потрібно отримати лише прізвища студентів; не потрібно включати кількість їхніх оцінок у відповідь. Використайте оператор HAVING
та агрегатну функцію COUNT()
для виконання цього завдання. Відсортуйте прізвища в алфавітному порядку.
Примітка:
У результаті має бути лише один стовпець із прізвищами.
Коротка інструкція
- Отримайте стовпець
student_surname
. - Згрупуйте дані за
student_surname
. - Використайте оператор
HAVING
для фільтрації результатів за умовоюCOUNT(grade) > 1
. - Відсортуйте результати за
student_surname
.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you show me how to write the correct SQL query to find those students?
Can you explain why the HAVING clause works in this situation?
Can you give another example of using HAVING with a different aggregate function?
Awesome!
Completion rate improved to 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
, де задали умову для стовпця, за яким групували дані.
Note
Для використання агрегації даних у операторі
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
Ваше завдання — отримати прізвища студентів, які мають декілька оцінок у школі.
Потрібно отримати лише прізвища студентів; не потрібно включати кількість їхніх оцінок у відповідь. Використайте оператор HAVING
та агрегатну функцію COUNT()
для виконання цього завдання. Відсортуйте прізвища в алфавітному порядку.
Примітка:
У результаті має бути лише один стовпець із прізвищами.
Коротка інструкція
- Отримайте стовпець
student_surname
. - Згрупуйте дані за
student_surname
. - Використайте оператор
HAVING
для фільтрації результатів за умовоюCOUNT(grade) > 1
. - Відсортуйте результати за
student_surname
.
Рішення
Дякуємо за ваш відгук!
Awesome!
Completion rate improved to 4single