Клаузула 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 students with more than one grade?
Can you explain why the HAVING clause works in this scenario?
Can you give another example of using HAVING with a different condition?
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