HAVING
Школа дуже вдячна за вашу роботу, і тепер у нас є нове завдання.
Виявилося, що деякі студенти складали додаткові іспити, коли мали скласти лише один. Школа підозрює їх у нечесності, оскільки кожен студент має мати лише одну оцінку.
Нам доручили з'ясувати прізвища цих студентів і передати їх адміністрації школи, щоб вони змогли вжити необхідних заходів.
Давайте разом подумаємо як ми можемо це зробити. Ви можете почати з того, що ми можемо зробити це за допомогою клавзи WHERE, і це буде виглядати приблизно так:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Але, як ви можете побачити, ми отримуємо помилку, що вказує на те, що ми не можемо використовувати агрегатні функції усередині клози WHERE. Ось де нам знадобиться клоза HAVING.
Давайте зрозуміємо, що це таке і як це використовувати, на прикладі з нашої таблиці employee.
Припустимо, нам потрібно отримати відділи, де середня заробітна плата співробітників нижче $70,000 на рік.
Для цього нам знадобиться використовувати агрегатну функцію та клозу HAVING.
Давайте подивимося, як ми можемо це зробити:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Ми отримали один відділ у відповідь, використовуючи клас HAVING, де ми встановили умову для колонки, по якій групували дані.
Примітка
Щоб використовувати агрегацію даних в класі
HAVING, нам потрібно мати групування даних у нашому запиті. Як у запиті вище, ми групували дані по колонціdepartment.
Давайте розглянемо більш узагальнений синтаксис класу HAVING та коли його найкраще використовувати:
SELECT column1, column2... --(за бажанням)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(умова)
Давайте також коротко розглянемо головну відмінність між клозами WHERE та HAVING та коли варто використовувати кожен з них:
- Клоз
WHEREвикористовується до агрегації даних, тоді як клозHAVINGзастосовується після агрегації даних; - Клоз
WHEREпишеться доGROUP BY, у той час як клозHAVINGзаписується післяGROUP BY.
Ось дві головні відмінності, які вам потрібно пам'ятати для успішного використання клозу HAVING. Тепер давайте повернемося до завдання, яке нам дала школа.
Ось попередній перегляд таблиці student_grades, з якою ми працюємо:
Swipe to start coding
Your task will be to fetch the last names of students who have multiple grades for the school.
You only need to retrieve the last names of the students; there's no need to include the count of their grades in the response. Use the HAVING clause and the COUNT() aggregate function to accomplish this task. Then, sort the surnames in the alphabetical order.
Note:
You should have only one column with last names in the result.
Brief Instructions
- Retrieve the
student_surnamecolumn. - Group the data by
student_surname. - Use the
HAVINGclause to filter the results based onCOUNT(grade) > 1. - Sort the results by
student_surname.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you show me how to write the correct SQL query to find the students with more than one grade?
Can you explain why the HAVING clause works in this scenario but WHERE does not?
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.
Давайте зрозуміємо, що це таке і як це використовувати, на прикладі з нашої таблиці employee.
Припустимо, нам потрібно отримати відділи, де середня заробітна плата співробітників нижче $70,000 на рік.
Для цього нам знадобиться використовувати агрегатну функцію та клозу HAVING.
Давайте подивимося, як ми можемо це зробити:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Ми отримали один відділ у відповідь, використовуючи клас HAVING, де ми встановили умову для колонки, по якій групували дані.
Примітка
Щоб використовувати агрегацію даних в класі
HAVING, нам потрібно мати групування даних у нашому запиті. Як у запиті вище, ми групували дані по колонціdepartment.
Давайте розглянемо більш узагальнений синтаксис класу HAVING та коли його найкраще використовувати:
SELECT column1, column2... --(за бажанням)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(умова)
Давайте також коротко розглянемо головну відмінність між клозами WHERE та HAVING та коли варто використовувати кожен з них:
- Клоз
WHEREвикористовується до агрегації даних, тоді як клозHAVINGзастосовується після агрегації даних; - Клоз
WHEREпишеться доGROUP BY, у той час як клозHAVINGзаписується післяGROUP BY.
Ось дві головні відмінності, які вам потрібно пам'ятати для успішного використання клозу HAVING. Тепер давайте повернемося до завдання, яке нам дала школа.
Ось попередній перегляд таблиці student_grades, з якою ми працюємо:
Swipe to start coding
Your task will be to fetch the last names of students who have multiple grades for the school.
You only need to retrieve the last names of the students; there's no need to include the count of their grades in the response. Use the HAVING clause and the COUNT() aggregate function to accomplish this task. Then, sort the surnames in the alphabetical order.
Note:
You should have only one column with last names in the result.
Brief Instructions
- Retrieve the
student_surnamecolumn. - Group the data by
student_surname. - Use the
HAVINGclause to filter the results based onCOUNT(grade) > 1. - Sort the results by
student_surname.
Рішення
Дякуємо за ваш відгук!
single