-- Напишите запрос, который возвращает каналы, у которых >= 2 телепередач

Для двух и более передач используйте GROUP BY/HAVING, для отсутствующих — NOT EXISTS, для последней передачи — выбор первой строки после сортировки по времени и ID.

Короткий ответ

Что ответить на собеседовании

Для двух и более передач используйте GROUP BY/HAVING, для отсутствующих — NOT EXISTS, для последней передачи — выбор первой строки после сортировки по времени и ID.

Подробный разбор

Ответ с пояснениями

Условие

-- Напишите запрос, который возвращает каналы, у которых >= 2 телепередач

-- Напишите запрос, который возвращает каналы, у которых 0 телепередач

-- Напишите запрос, который выводит для каждого телеканала -- его имя и его последнюю программу в базе

Ответ

Для двух и более передач используйте GROUP BY/HAVING, для отсутствующих — NOT EXISTS, для последней передачи — выбор первой строки после сортировки по времени и ID.

Схема не указана. Предположим PostgreSQL и таблицы channels(id, name), programs(id, channel_id, name, starts_at). «Последняя» означает максимальное время начала.

SELECT c.id, c.name
FROM channels c JOIN programs p ON p.channel_id = c.id
GROUP BY c.id, c.name HAVING count(*) >= 2;

SELECT c.* FROM channels c
WHERE NOT EXISTS (
  SELECT 1 FROM programs p WHERE p.channel_id = c.id
);

SELECT c.name, p.name AS last_program
FROM channels c
LEFT JOIN LATERAL (
  SELECT name FROM programs
  WHERE channel_id = c.id
  ORDER BY starts_at DESC NULLS LAST, id DESC
  LIMIT 1
) p ON true;

Последний запрос сохраняет каналы без программ с NULL. Если требуется последняя уже вышедшая передача, добавьте ограничение по текущему времени.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее