Клаузула 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
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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