Вопросы на собеседованиях
❓ В чём разница между INNER JOIN и LEFT JOIN?¶
👉 INNER JOIN оставляет только те строки, у которых есть совпадение в обеих таблицах. LEFT JOIN — оставляет все строки из левой таблицы, даже если нет совпадения.
❓ Что делает GROUP BY и как он связан с HAVING?¶
👉 GROUP BY группирует строки, а HAVING фильтрует группы. HAVING работает как WHERE, но для агрегатов.
❓ Что вернёт SELECT COUNT(*) FROM table WHERE column IS NULL?¶
👉 Количество строк, где column имеет значение NULL.
❓ Почему WHERE нельзя использовать с агрегатами?¶
👉 WHERE фильтрует строки до группировки, а агрегаты появляются после — для них нужен HAVING.
❓ Как выбрать 3 самых дорогих заказа по каждому клиенту?¶
👉 Используется оконная функция:
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY total DESC) AS rn
FROM orders
) sub
WHERE rn <= 3;