Клаузула 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, де ми встановили умову для стовпця, за яким групували дані.
Примітка
Щоб використовувати агрегацію даних у операторі
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
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Чудово!
Completion показник покращився до 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, де ми встановили умову для стовпця, за яким групували дані.
Примітка
Щоб використовувати агрегацію даних у операторі
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