SQLab
УчёбаПрактикаЗадачиАренаРейтинг
© 2026 SQLab · Ташкент
SQLab

Учите SQL прямо в браузере — ничего не нужно устанавливать.

Платформа

  • Учёба
  • Практика
  • Задачи
  • Арена
  • Рейтинг

Для кого

  • Студентам
  • Преподавателям
  • Университетам
© 2026 SQLab. Все права защищены.Сделано в Узбекистане для студентов.
УчёбаПрактикаЗадачиАренаРейтинг
0/26

Основы

  • Что такое база данных?
  • Первый SELECT
  • WHERE: отбор нужных строк
  • IN, BETWEEN, LIKE и NULL
  • Сортировка, LIMIT и DISTINCT

Вычисления

  • Выражения, функции и CASE
  • Работа с датами
  • COUNT, SUM, AVG, MIN, MAX
  • GROUP BY и HAVING

Соединение таблиц

  • Ключи и связи
  • INNER JOIN
  • LEFT JOIN и строки без пары
  • Несколько таблиц и self join

Сложные запросы

  • Подзапросы
  • UNION, INTERSECT, EXCEPT
  • WITH: именованные запросы
  • Оконные функции

Создание и изменение таблиц

  • CREATE TABLE: типы и ограничения
  • INSERT, UPDATE, DELETE
  • ALTER, DROP, TRUNCATE
  • Как правильно спроектировать базу

Профессиональный уровень

  • Индексы и EXPLAIN
  • Транзакции и ACID
  • VIEW: сохранённые запросы
  • Функции, процедуры, триггеры
  • Пользователи, права и резервные копии
Учёба/Вычисления

GROUP BY и HAVING

099 мин

GROUP BY раскладывает строки на группы с одинаковым значением и считает отдельно для каждой группы. «Сколько студентов из каждого города?», «средняя цена в каждой категории?» — это всё он.

Как это работает

university· Попробуйте изменить
SELECT city, COUNT(*) AS students
FROM students
GROUP BY city
ORDER BY students DESC;

База раскладывает студентов по «стопкам» по городам, а потом считает каждую стопку. В результате каждый город — одна строка.

Правило

Каждый столбец в SELECT должен либо стоять в GROUP BY, либо быть внутри агрегата:

university· Попробуйте изменить
SELECT course, funding, COUNT(*) FROM students GROUP BY course, funding ORDER BY course, funding;

PostgreSQL проверяет это правило всегда: при нарушении — ошибка «must appear in the GROUP BY clause».

HAVING — условие для групп

WHERE фильтрует строки до группировки, а HAVING — группы после:

university· Попробуйте изменить
SELECT city, COUNT(*) AS students
FROM students
GROUP BY city
HAVING COUNT(*) > 25
ORDER BY students DESC;

Вместе:

university· Попробуйте изменить
SELECT city, COUNT(*) AS grant_students
FROM students
WHERE funding = 'grant'
GROUP BY city
HAVING COUNT(*) >= 10;

Порядок выполнения

Запрос пишется в таком порядке, и база выполняет его почти так же:

  1. FROM — какая таблица;
  2. WHERE — какие строки;
  3. GROUP BY — группировка;
  4. HAVING — какие группы;
  5. SELECT — что показать;
  6. ORDER BY, LIMIT — порядок и ограничение.

Поэтому COUNT(*) нельзя использовать в WHERE — на этом шаге групп ещё нет.

1Упражнение

Выведите число заказов для каждого статуса (status): статус и количество.


2Упражнение

Выведите бренды, у которых не меньше 4 товаров: brand и количество товаров.


3Упражнение

Выведите сумму amount платежей по каждому способу оплаты (method).


Запомните

  • GROUP BY — подсчёт по группам; обычные столбцы из SELECT должны быть в GROUP BY.
  • WHERE — для строк, HAVING — для групп.
  • Порядок: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
Предыдущий урокCOUNT, SUM, AVG, MIN, MAXСледующий урокКлючи и связи

Содержание

  • Как это работает
  • Правило
  • HAVING — условие для групп
  • Порядок выполнения
  • Запомните
УчёбаПрактикаЗадачиАренаРейтинг

SQLab