Мужчины старше 18 лет

Отберите мужчин старше 18 лет и проверьте через EXISTS наличие заказа товара производителя X. EXISTS не размножает пользователя при нескольких подходящих заказах.

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

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

Отберите мужчин старше 18 лет и проверьте через EXISTS наличие заказа товара производителя X. EXISTS не размножает пользователя при нескольких подходящих заказах.

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

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

Условие

Необходимо отобрать всех мужчин, которым более 18 лет и которые оформили заказ продукции, произведённой фирмой 'X'.

User(id, name, sex, birthday)
Product(id, maker, model, type)
Order(user_id, product_id, date, count, code, price, total_sum)

Ответ

Отберите мужчин старше 18 лет и проверьте через EXISTS наличие заказа товара производителя X. EXISTS не размножает пользователя при нескольких подходящих заказах.

Пример для PostgreSQL; предполагается sex = 'M' и birthday типа date:

SELECT u.*
FROM "User" u
WHERE u.sex = 'M'
  AND u.birthday < (CURRENT_DATE - INTERVAL '18 years')::date
  AND EXISTS (
      SELECT 1
      FROM "Order" o
      JOIN "Product" p ON p.id = o.product_id
      WHERE o.user_id = u.id AND p.maker = 'X'
  );

Здесь «старше 18» означает уже прошедший 18-й день рождения; ровно сегодня исполнившиеся 18 исключены. Если нужен полный возраст больше 18, граница другая — 19 лет. Регистр имён таблиц и код пола необходимо согласовать с реальной схемой.

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

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

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

Подробнее