Список покупателей и содержимое их корзин

Используйте соединение customer с carts по customer_id, возвращая одну строку на позицию корзины. LEFT JOIN дополнительно сохранит клиентов без товаров.

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

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

Используйте соединение customer с carts по customer_id, возвращая одну строку на позицию корзины. LEFT JOIN дополнительно сохранит клиентов без товаров.

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

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

Условие

Необходимо вывести построчно информацию о каждом клиенте (идентификатор и электронная почта) вместе со всеми товарами, находящимися в его корзине (артикул и количество).

-- Table "public.carts"
-- Column     | Type                        | Modifiers
-- -----------|-----------------------------|-----------------------------
-- sku        | bigint                      | not null
-- country    | country_enum                | not null
-- customer_id| bigint                      |
-- amount     | bigint                      | not null
-- updated_at | timestamp without time zone| default now()

-- Table "public.customer"
-- Column | Type  | Modifiers
-- -------|-------|----------------
-- id     | bigint| not null
-- email  | text  | not null

Ответ

Используйте соединение customer с carts по customer_id, возвращая одну строку на позицию корзины. LEFT JOIN дополнительно сохранит клиентов без товаров.

Запрос со всеми клиентами:

SELECT c.id, c.email, cart.sku, cart.amount
FROM public.customer AS c
LEFT JOIN public.carts AS cart ON cart.customer_id = c.id
ORDER BY c.id, cart.sku, cart.country;

У пустой корзины sku и amount будут NULL. Если нужны только клиенты с товарами, замените соединение на INNER JOIN и при необходимости добавьте amount>0. Если SKU встречается в разных странах, строки остаются отдельными; для их различения можно вывести также country.

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

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

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

Подробнее