-- Есть данные с полями user_id, status и created_at.

Запрос в условии уже считает записи status='OK' за последние семь дней по каждому user_id и сортирует по убыванию количества. Пользователи без подходящих записей не выводятся.

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

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

Запрос в условии уже считает записи status='OK' за последние семь дней по каждому user_id и сортирует по убыванию количества. Пользователи без подходящих записей не выводятся.

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

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

Условие

-- Есть данные с полями user_id, status и created_at. -- Напишите SQL-запрос, который считает успешные запросы каждого пользователя за последние 7 дней и сортирует результат по количеству по убыванию. -- Успешный статус - OK

CREATE TABLE user_requests ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL, status VARCHAR(50) NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL );

SELECT user_id, COUNT(*) AS successful_count FROM user_requests WHERE status = 'OK' AND created_at >= CURRENT_TIMESTAMP - INTERVAL '7 days' GROUP BY user_id ORDER BY successful_count DESC;

Ответ

Запрос в условии уже считает записи status='OK' за последние семь дней по каждому user_id и сортирует по убыванию количества. Пользователи без подходящих записей не выводятся.

GROUP BY объединяет события пользователя, COUNT(*) считает строки. Для детерминированного порядка при равенстве добавьте user_id в ORDER BY. Если в данных возможны будущие даты, задайте верхнюю границу created_at <= CURRENT_TIMESTAMP. Уточните смысл периода: семь календарных дней и ровно 168 часов могут различаться при смене часового пояса/DST.

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

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

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

Подробнее