Получение департаментов, где только мужчины оценили выше пяти

Сгруппируйте строки по department_id и в HAVING требуйте, чтобы число подходящих строк совпадало с общим числом. Тогда женщины, низкие оценки и NULL исключат департамент.

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

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

Сгруппируйте строки по department_id и в HAVING требуйте, чтобы число подходящих строк совпадало с общим числом. Тогда женщины, низкие оценки и NULL исключат департамент.

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

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

Условие

Имеется таблица evaluations. Не используя JOIN‑ов и вложенных запросов, необходимо вывести все идентификаторы департаментов, в которых присутствуют только мужчины‑респонденты и каждый из них поставил оценку строго больше 5.

evaluations.sql
create table evaluations
(
    respondent_id uuid primary key, -- ID респондента
    department_id uuid,             -- ID департамента
    gender        boolean,          -- true — мужчина, false — женщина
    value         integer
);

Ответ

Сгруппируйте строки по department_id и в HAVING требуйте, чтобы число подходящих строк совпадало с общим числом. Тогда женщины, низкие оценки и NULL исключат департамент.

SELECT department_id
FROM evaluations
WHERE department_id IS NOT NULL
GROUP BY department_id
HAVING COUNT(*) = SUM(
  CASE WHEN gender IS TRUE AND value > 5 THEN 1 ELSE 0 END
);

Фильтровать gender и value в WHERE нельзя: так исчезнут неподходящие респонденты и смешанный департамент ошибочно пройдёт проверку. Пустые департаменты не представлены в evaluations и в результат не попадут. JOIN и вложенные запросы не используются.

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

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

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

Подробнее