← К оглавлению занятия

🐛 Типичные ошибки

⚡ Кратко: ошибки

  • Забыть включить неагрегированный столбец в GROUP BY.
  • Использовать WHERE для фильтрации групп вместо HAVING.
  • Путать COUNT(*) и COUNT(column).
  • Применять SUM или AVG к нечисловым типам.
  • Группировать по уникальному столбцу без пользы.
1

Ошибка: столбец не в GROUP BY

-- Ошибка: first_name не в GROUP BY и не в агрегате
SELECT city, first_name, COUNT(id)
FROM employees
GROUP BY city;

-- Правильно
SELECT city, COUNT(id) AS number_employees
FROM employees
GROUP BY city;
2

Ошибка: фильтрация групп через WHERE

-- Ошибка: WHERE нельзя использовать с агрегатами
SELECT city, COUNT(id) AS cnt
FROM employees
WHERE COUNT(id) > 5
GROUP BY city;

-- Правильно (подробнее в следующем занятии)
SELECT city, COUNT(id) AS cnt
FROM employees
GROUP BY city
HAVING COUNT(id) > 5;
3

Ошибка: COUNT(*) vs COUNT(column)

-- Все строки, включая NULL
SELECT COUNT(*) FROM employees;

-- Только строки, где email не NULL
SELECT COUNT(email) FROM employees;
4

Ошибка: SUM/AVG с нечисловыми данными

-- Ошибка: first_name — строка
SELECT SUM(first_name) FROM employees;

-- Правильно
SELECT SUM(salary) FROM employees;
5

Ошибка: бессмысленная группировка по уникальному ключу

Если группировать по первичному ключу, каждая группа будет содержать ровно одну строку, поэтому агрегаты не дадут новой информации.

-- Бессмысленно: id уникален
SELECT id, COUNT(*) FROM employees GROUP BY id;

-- Полезно: группировка по городу
SELECT city, COUNT(*) FROM employees GROUP BY city;