Используйте соединение 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.