10 клиентов с наибольшим числом товаров в корзине

Суммируйте amount по клиенту, упорядочьте по убыванию суммы и возьмите первые десять строк. COUNT(*) считал бы позиции, а не количество единиц товара.

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

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

Суммируйте amount по клиенту, упорядочьте по убыванию суммы и возьмите первые десять строк. COUNT(*) считал бы позиции, а не количество единиц товара.

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

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

Условие

В базе присутствуют две таблицы public.customer и public.carts. Необходимо получить список из десяти клиентов (столбцы: id, email), у которых суммарное количество товаров в корзине (учитывая поле amount) максимально.

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

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

Ответ

Суммируйте amount по клиенту, упорядочьте по убыванию суммы и возьмите первые десять строк. COUNT(*) считал бы позиции, а не количество единиц товара.

Для клиентов с записями корзины:

SELECT c.id, c.email
FROM public.customer AS c
JOIN public.carts AS cart ON cart.customer_id = c.id
GROUP BY c.id, c.email
ORDER BY SUM(cart.amount) DESC, c.id
LIMIT 10;

Дополнительная сортировка по id делает выбор при равных суммах устойчивым. Если нужно включить клиентов без корзины с нулевой суммой, используйте LEFT JOIN и COALESCE. Корректность количества предполагает согласованные правила для нулевых и отрицательных amount.

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

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

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

Подробнее