Перейти к содержанию

Вопросы на собеседованиях

❓ В чём разница между 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;