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

🐛 Типичные ошибки: Практикум 5

⚡ Топ-3 ошибки

  • Фильтр агрегата через WHERE вместо HAVING.
  • Забытая база данных — не выполнен USE northwind.
  • Регистр в строковых фильтрах.

Ошибка 1. COUNT(*) вместо COUNT(id) или COUNT(column)

В задании 2 нужно считать товары. COUNT(*) и COUNT(id) дадут одинаковый результат, если в id нет NULL. Но в задании 4 важно использовать WHERE minimum_reorder_quantity IS NULL, и COUNT(*) там всё ещё вернёт все строки, включая с NULL — что правильно, так как мы считаем строки с отсутствующим значением.

Ошибка 2. WHERE вместо HAVING

-- Неправильно
SELECT category, COUNT(id)
FROM products
WHERE COUNT(id) >= 3
GROUP BY category;

-- Правильно
SELECT category, COUNT(id)
FROM products
GROUP BY category
HAVING COUNT(id) >= 3;

Ошибка 3. Регистр в LIKE

В задании 7 ищем 'box'. В данных может быть 'Box', 'BOX' и т.д. Используйте LOWER(quantity_per_unit) LIKE '%box%'.

Ошибка 4. Не выбрана база данных

Если не выполнить USE northwind;, запросы могут обращаться к другой схеме или выдать ошибку Table 'products' doesn't exist.

Ошибка 5. BETWEEN и границы

BETWEEN 10 AND 20 включает обе границы. В задании 6 это соответствует условию «от 10 до 20 включительно».