10 клиентов с наибольшим общим количеством покупок

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

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

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

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

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

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

Условие

Необходимо сформировать список из десяти клиентов, у которых суммарное количество приобретённых товаров максимально. Для подсчёта использовать столбец amount из таблицы carts.

-- 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

Ответ

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

Запрос:

WITH totals AS (
  SELECT customer_id, SUM(amount) AS total_amount
  FROM public.carts
  WHERE customer_id IS NOT NULL
  GROUP BY customer_id
)
SELECT c.id, c.email, t.total_amount
FROM totals t
JOIN public.customer c ON c.id = t.customer_id
ORDER BY t.total_amount DESC, c.id
LIMIT 10;

Предполагается уникальность customer.id. Считаются единицы товара, не строки корзины и не деньги. Страны объединяются, поскольку задача просит общий итог клиента. Если carts хранит текущую корзину, а не завершённые покупки, такой запрос показывает объём корзин: сам по себе он не доказывает факт оплаты.

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

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

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

Подробнее