Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
HAVING | Групування
Розширений Рівень SQL
course content

Зміст курсу

Розширений Рівень SQL

Розширений Рівень SQL

1. Групування
2. Вкладені Запити
3. Об'єднання Таблиць
4. DDL та DML в SQL

HAVING

Школа дуже вдячна за вашу роботу, і тепер у нас є нове завдання.

Виявилося, що деякі студенти складали додаткові іспити, коли мали скласти лише один. Школа підозрює їх у нечесності, оскільки кожен студент має мати лише одну оцінку.

Нам доручили з'ясувати прізвища цих студентів і передати їх адміністрації школи, щоб вони змогли вжити необхідних заходів.

Давайте разом подумаємо як ми можемо це зробити. Ви можете почати з того, що ми можемо зробити це за допомогою клавзи WHERE, і це буде виглядати приблизно так:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Але, як ви можете побачити, ми отримуємо помилку, що вказує на те, що ми не можемо використовувати агрегатні функції усередині клози WHERE. Ось де нам знадобиться клоза HAVING.

Давайте зрозуміємо, що це таке і як це використовувати, на прикладі з нашої таблиці employee.

Припустимо, нам потрібно отримати відділи, де середня заробітна плата співробітників нижче $70,000 на рік.

Для цього нам знадобиться використовувати агрегатну функцію та клозу HAVING.

Давайте подивимося, як ми можемо це зробити:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Ми отримали один відділ у відповідь, використовуючи клас HAVING, де ми встановили умову для колонки, по якій групували дані.

Примітка

Щоб використовувати агрегацію даних в класі HAVING, нам потрібно мати групування даних у нашому запиті. Як у запиті вище, ми групували дані по колонці department.

Давайте розглянемо більш узагальнений синтаксис класу HAVING та коли його найкраще використовувати:

Давайте також коротко розглянемо головну відмінність між клозами WHERE та HAVING та коли варто використовувати кожен з них:

  1. Клоз WHERE використовується до агрегації даних, тоді як клоз HAVING застосовується після агрегації даних;
  2. Клоз WHERE пишеться до GROUP BY, у той час як клоз HAVING записується після GROUP BY.

Ось дві головні відмінності, які вам потрібно пам'ятати для успішного використання клозу HAVING. Тепер давайте повернемося до завдання, яке нам дала школа.

Ось попередній перегляд таблиці student_grades, з якою ми працюємо:

Завдання

Вам потрібно отримати прізвища студентів, які мають декілька оцінок у школі.

Необхідно витягнути лише прізвища студентів; немає потреби включати кількість їхніх оцінок у відповідь. Використовуйте клавзу HAVING та агрегатну функцію COUNT() для виконання цього завдання. Потім відсортуйте прізвища у алфавітному порядку.

Примітка:

У результаті має бути тільки одна колонка з прізвищами.

Завдання

Вам потрібно отримати прізвища студентів, які мають декілька оцінок у школі.

Необхідно витягнути лише прізвища студентів; немає потреби включати кількість їхніх оцінок у відповідь. Використовуйте клавзу HAVING та агрегатну функцію COUNT() для виконання цього завдання. Потім відсортуйте прізвища у алфавітному порядку.

Примітка:

У результаті має бути тільки одна колонка з прізвищами.

Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів

Все було зрозуміло?

Секція 1. Розділ 6
toggle bottom row

HAVING

Школа дуже вдячна за вашу роботу, і тепер у нас є нове завдання.

Виявилося, що деякі студенти складали додаткові іспити, коли мали скласти лише один. Школа підозрює їх у нечесності, оскільки кожен студент має мати лише одну оцінку.

Нам доручили з'ясувати прізвища цих студентів і передати їх адміністрації школи, щоб вони змогли вжити необхідних заходів.

Давайте разом подумаємо як ми можемо це зробити. Ви можете почати з того, що ми можемо зробити це за допомогою клавзи WHERE, і це буде виглядати приблизно так:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Але, як ви можете побачити, ми отримуємо помилку, що вказує на те, що ми не можемо використовувати агрегатні функції усередині клози WHERE. Ось де нам знадобиться клоза HAVING.

Давайте зрозуміємо, що це таке і як це використовувати, на прикладі з нашої таблиці employee.

Припустимо, нам потрібно отримати відділи, де середня заробітна плата співробітників нижче $70,000 на рік.

Для цього нам знадобиться використовувати агрегатну функцію та клозу HAVING.

Давайте подивимося, як ми можемо це зробити:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Ми отримали один відділ у відповідь, використовуючи клас HAVING, де ми встановили умову для колонки, по якій групували дані.

Примітка

Щоб використовувати агрегацію даних в класі HAVING, нам потрібно мати групування даних у нашому запиті. Як у запиті вище, ми групували дані по колонці department.

Давайте розглянемо більш узагальнений синтаксис класу HAVING та коли його найкраще використовувати:

Давайте також коротко розглянемо головну відмінність між клозами WHERE та HAVING та коли варто використовувати кожен з них:

  1. Клоз WHERE використовується до агрегації даних, тоді як клоз HAVING застосовується після агрегації даних;
  2. Клоз WHERE пишеться до GROUP BY, у той час як клоз HAVING записується після GROUP BY.

Ось дві головні відмінності, які вам потрібно пам'ятати для успішного використання клозу HAVING. Тепер давайте повернемося до завдання, яке нам дала школа.

Ось попередній перегляд таблиці student_grades, з якою ми працюємо:

Завдання

Вам потрібно отримати прізвища студентів, які мають декілька оцінок у школі.

Необхідно витягнути лише прізвища студентів; немає потреби включати кількість їхніх оцінок у відповідь. Використовуйте клавзу HAVING та агрегатну функцію COUNT() для виконання цього завдання. Потім відсортуйте прізвища у алфавітному порядку.

Примітка:

У результаті має бути тільки одна колонка з прізвищами.

Завдання

Вам потрібно отримати прізвища студентів, які мають декілька оцінок у школі.

Необхідно витягнути лише прізвища студентів; немає потреби включати кількість їхніх оцінок у відповідь. Використовуйте клавзу HAVING та агрегатну функцію COUNT() для виконання цього завдання. Потім відсортуйте прізвища у алфавітному порядку.

Примітка:

У результаті має бути тільки одна колонка з прізвищами.

Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів

Все було зрозуміло?

Секція 1. Розділ 6
toggle bottom row

HAVING

Школа дуже вдячна за вашу роботу, і тепер у нас є нове завдання.

Виявилося, що деякі студенти складали додаткові іспити, коли мали скласти лише один. Школа підозрює їх у нечесності, оскільки кожен студент має мати лише одну оцінку.

Нам доручили з'ясувати прізвища цих студентів і передати їх адміністрації школи, щоб вони змогли вжити необхідних заходів.

Давайте разом подумаємо як ми можемо це зробити. Ви можете почати з того, що ми можемо зробити це за допомогою клавзи WHERE, і це буде виглядати приблизно так:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Але, як ви можете побачити, ми отримуємо помилку, що вказує на те, що ми не можемо використовувати агрегатні функції усередині клози WHERE. Ось де нам знадобиться клоза HAVING.

Давайте зрозуміємо, що це таке і як це використовувати, на прикладі з нашої таблиці employee.

Припустимо, нам потрібно отримати відділи, де середня заробітна плата співробітників нижче $70,000 на рік.

Для цього нам знадобиться використовувати агрегатну функцію та клозу HAVING.

Давайте подивимося, як ми можемо це зробити:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Ми отримали один відділ у відповідь, використовуючи клас HAVING, де ми встановили умову для колонки, по якій групували дані.

Примітка

Щоб використовувати агрегацію даних в класі HAVING, нам потрібно мати групування даних у нашому запиті. Як у запиті вище, ми групували дані по колонці department.

Давайте розглянемо більш узагальнений синтаксис класу HAVING та коли його найкраще використовувати:

Давайте також коротко розглянемо головну відмінність між клозами WHERE та HAVING та коли варто використовувати кожен з них:

  1. Клоз WHERE використовується до агрегації даних, тоді як клоз HAVING застосовується після агрегації даних;
  2. Клоз WHERE пишеться до GROUP BY, у той час як клоз HAVING записується після GROUP BY.

Ось дві головні відмінності, які вам потрібно пам'ятати для успішного використання клозу HAVING. Тепер давайте повернемося до завдання, яке нам дала школа.

Ось попередній перегляд таблиці student_grades, з якою ми працюємо:

Завдання

Вам потрібно отримати прізвища студентів, які мають декілька оцінок у школі.

Необхідно витягнути лише прізвища студентів; немає потреби включати кількість їхніх оцінок у відповідь. Використовуйте клавзу HAVING та агрегатну функцію COUNT() для виконання цього завдання. Потім відсортуйте прізвища у алфавітному порядку.

Примітка:

У результаті має бути тільки одна колонка з прізвищами.

Завдання

Вам потрібно отримати прізвища студентів, які мають декілька оцінок у школі.

Необхідно витягнути лише прізвища студентів; немає потреби включати кількість їхніх оцінок у відповідь. Використовуйте клавзу HAVING та агрегатну функцію COUNT() для виконання цього завдання. Потім відсортуйте прізвища у алфавітному порядку.

Примітка:

У результаті має бути тільки одна колонка з прізвищами.

Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів

Все було зрозуміло?

Школа дуже вдячна за вашу роботу, і тепер у нас є нове завдання.

Виявилося, що деякі студенти складали додаткові іспити, коли мали скласти лише один. Школа підозрює їх у нечесності, оскільки кожен студент має мати лише одну оцінку.

Нам доручили з'ясувати прізвища цих студентів і передати їх адміністрації школи, щоб вони змогли вжити необхідних заходів.

Давайте разом подумаємо як ми можемо це зробити. Ви можете почати з того, що ми можемо зробити це за допомогою клавзи WHERE, і це буде виглядати приблизно так:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Але, як ви можете побачити, ми отримуємо помилку, що вказує на те, що ми не можемо використовувати агрегатні функції усередині клози WHERE. Ось де нам знадобиться клоза HAVING.

Давайте зрозуміємо, що це таке і як це використовувати, на прикладі з нашої таблиці employee.

Припустимо, нам потрібно отримати відділи, де середня заробітна плата співробітників нижче $70,000 на рік.

Для цього нам знадобиться використовувати агрегатну функцію та клозу HAVING.

Давайте подивимося, як ми можемо це зробити:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Ми отримали один відділ у відповідь, використовуючи клас HAVING, де ми встановили умову для колонки, по якій групували дані.

Примітка

Щоб використовувати агрегацію даних в класі HAVING, нам потрібно мати групування даних у нашому запиті. Як у запиті вище, ми групували дані по колонці department.

Давайте розглянемо більш узагальнений синтаксис класу HAVING та коли його найкраще використовувати:

Давайте також коротко розглянемо головну відмінність між клозами WHERE та HAVING та коли варто використовувати кожен з них:

  1. Клоз WHERE використовується до агрегації даних, тоді як клоз HAVING застосовується після агрегації даних;
  2. Клоз WHERE пишеться до GROUP BY, у той час як клоз HAVING записується після GROUP BY.

Ось дві головні відмінності, які вам потрібно пам'ятати для успішного використання клозу HAVING. Тепер давайте повернемося до завдання, яке нам дала школа.

Ось попередній перегляд таблиці student_grades, з якою ми працюємо:

Завдання

Вам потрібно отримати прізвища студентів, які мають декілька оцінок у школі.

Необхідно витягнути лише прізвища студентів; немає потреби включати кількість їхніх оцінок у відповідь. Використовуйте клавзу HAVING та агрегатну функцію COUNT() для виконання цього завдання. Потім відсортуйте прізвища у алфавітному порядку.

Примітка:

У результаті має бути тільки одна колонка з прізвищами.

Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Секція 1. Розділ 6
Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
We're sorry to hear that something went wrong. What happened?
some-alt