Клаузула 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.
Рішення
Дякуємо за ваш відгук!
single