**Контекст:** Задание по мотивам реального тестового в VK. Продуктовый аналитик изучает раннюю вовлечённость: сколько в среднем транзакций совершает пользователь в первые 72 часа после первой покупки.
**Данные:**
[см. код в задании]
| user_id | item_name | ts | price |
|---------|--------------------|---------------------|--------|
| 1 | Стикерпак | 2025-01-10 09:00:00 | 99.00 |
| 1 | Подписка Музыка | 2025-01-10 14:30:00 | 199.00 |
| 1 | Голоса 100 | 2025-01-11 10:00:00 | 490.00 |
| 1 | Стикерпак 2 | 2025-01-15 16:00:00 | 149.00 |
| ... | ... | ... | ... |
**Задание:**
1. Для каждого пользователя определите время первой транзакции
2. Посчитайте количество транзакций в пределах 72 часов от первой (включая саму первую)
3. Рассчитайте среднее количество транзакций за 72 часа по всем пользователям
4. Выведите промежуточные данные (user_id, first_ts, txn_count_72h) и итоговое среднее
Структура для ориентира — реальные значения из эталонного решения.
CREATE TABLE transactions (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL,
item_name VARCHAR(200) NOT NULL,
ts TIMESTAMP NOT NULL,
price NUMERIC(10,2) NOT NULL,
quantity INT NOT NULL DEFAULT 1
);
INSERT INTO transactions (user_id, item_name, ts, price, quantity) VALUES
(1, 'Стикерпак', '2025-01-10 09:00:00', 99.00, 1),
(1, 'Подписка Музыка', '2025-01-10 14:30:00', 199.00, 1),
(1, 'Голоса 100', '2025-01-11 10:00:00', 490.00, 1),
(1, 'Стикерпак 2', '2025-01-15 16:00:00', 149.00, 1),
(2, 'Подписка Музыка', '2025-01-08 11:00:00', 199.00, 1),
(2, 'Голоса 50', '2025-01-08 18:00:00', 250.00, 1),
(2, 'Стикерпак', '2025-01-09 09:00:00', 99.00, 1),
(2, 'VK Клипы PRO', '2025-01-09 15:00:00', 299.00, 1),
(2, 'Голоса 100', '2025-01-12 10:00:00', 490.00, 1),
(3, 'Голоса 50', '2025-01-05 08:00:00', 250.00, 1),
(3, 'Стикерпак', '2025-01-05 12:00:00', 99.00, 1),
(4, 'Подписка Музыка', '2025-02-01 10:00:00', 199.00, 1),
(5, 'Стикерпак', '2025-01-20 14:00:00', 99.00, 1),
(5, 'Голоса 100', '2025-01-20 18:00:00', 490.00, 1),
(5, 'VK Клипы PRO', '2025-01-21 09:00:00', 299.00, 1);
оконные функции MIN OVER INTERVAL подзапросы воронка
Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «SQL» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: оконные функции, MIN OVER, INTERVAL, подзапросы, воронка.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 425 SQL задач в песочнице с автопроверкой кода, конспекты SQL для аналитика, AI мок-собеседование с разбором ваших ответов.
← Все задания