Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Клаузула Having | Групування
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
SQL Середнього Рівня

bookКлаузула Having

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

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

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

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

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

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

Припустимо, потрібно отримати відділи, у яких середня зарплата співробітників менше $70,000 на рік. Для цього необхідно використати агрегатну функцію та оператор HAVING:

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

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

Примітка

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

Розглянемо більш узагальнений синтаксис оператора HAVING і коли його доцільно використовувати:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Також коротко розглянемо основну різницю між операторами WHERE та HAVING, а також коли їх використовувати:

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

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

Завдання

Swipe to start coding

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

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

Примітка:

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

Короткі інструкції

  • Отримайте стовпець student_surname.
  • Згрупуйте дані за student_surname.
  • Використайте оператор HAVING для фільтрації результатів за умовою COUNT(grade) > 1.
  • Відсортуйте результати за student_surname.

Рішення

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

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 6
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

close

bookКлаузула Having

Свайпніть щоб показати меню

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

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

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

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

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

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

Припустимо, потрібно отримати відділи, у яких середня зарплата співробітників менше $70,000 на рік. Для цього необхідно використати агрегатну функцію та оператор HAVING:

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

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

Примітка

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

Розглянемо більш узагальнений синтаксис оператора HAVING і коли його доцільно використовувати:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Також коротко розглянемо основну різницю між операторами WHERE та HAVING, а також коли їх використовувати:

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

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

Завдання

Swipe to start coding

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

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

Примітка:

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

Короткі інструкції

  • Отримайте стовпець student_surname.
  • Згрупуйте дані за student_surname.
  • Використайте оператор HAVING для фільтрації результатів за умовою COUNT(grade) > 1.
  • Відсортуйте результати за student_surname.

Рішення

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

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 6
single

single

some-alt