47 задачЛёгкие, средние, сложныеС эталонными решениямиРешение в браузере
GROUP BY и HAVING — база, без которой SQL-аналитика не существует. Порядок выполнения запроса: SELECT … FROM … WHERE … GROUP BY … HAVING — и путаница WHERE vs HAVING это запрос №1 на junior-собесе. На middle добавят COUNT(DISTINCT), CASE WHEN внутри агрегации, GROUPING SETS. 33 задачи от простых SUM до условных агрегаций для маркетинговых отчётов.
WHERE фильтрует строки ДО группировки. HAVING фильтрует группы ПОСЛЕ применения GROUP BY (можно использовать агрегатные функции в условии). Порядок: FROM → WHERE → GROUP BY → HAVING → SELECT.
COUNT(*) vs COUNT(column) vs COUNT(DISTINCT column)?
COUNT(*) считает все строки. COUNT(column) — строки где column не NULL. COUNT(DISTINCT column) — уникальные не-NULL значения column.
Можно ли использовать HAVING без GROUP BY?
Да. Без GROUP BY вся выборка считается одной группой, и HAVING фильтрует её целиком — например, SELECT COUNT(*) FROM orders HAVING COUNT(*) > 100 вернёт строку, только если заказов больше 100.