Junior
Анализ на активността на потребителите в рекламните кампании Фирмата води отчет за събития, свързани с рекламните кампании. Предоставени са два таблици: • campaigns — списък на рекламните кампании с техните идентификатори и имена; • events — събития на потребители по кампании с информация за типа на събитието (например 'click' (клик)) и времето. Необходимо е да се създаде отчет за всяка кампания с следните показатели: • Общо количество събития. • Брой уникални потребители, извършили събития. • Време на първото и последното събитие по кампания. • Ранг на кампанията по намаляващ брой на общите събития. Рангът е число, което се присвоява на всеки ред в резултатния набор въз основа на реда на данните. Ако две или повече реда имат еднаква стойност, те получават същия ранг, но следващият ранг се пропуска. Отчетът трябва да включва само кампании, които са имали събития: кампании без събития не се вземат предвид. Финалният отчет трябва да бъде сортиран първо по ранг на кампанията във възходящ ред, а след това по campaign_name в азбучен ред. Формат на входа • campaign_name (string) — името на рекламната кампания • start_date (timestamp) — дата и час на започване на кампанията • end_date (timestamp) — дата и час на приключване на кампанията Таблица events: • event_id (int) — уникален идентификатор на събитието • user_id (int) — уникален идентификатор на потребителя, който е извършил събитието • campaign_id (int) — уникален идентификатор на кампанията • event_type (string) — тип на събитието, например 'click' или 'conversion' • event_time (timestamp) — дата и час на събитието Данните не съдържат липсващи или неправилни стойности. Формат на изхода Заявката трябва да върне таблица с полета в този ред: • campaign_name (string) — името на рекламната кампания • total_events (int) — общият брой събития, свързани с кампанията • unique_users (int) — броят на уникалните потребители, които са извършили събития • first_event_time (timestamp) — дата и час на първото събитие на кампанията • last_event_time (timestamp) — дата и час на последното събитие на кампанията • campaign_rank (int) — ранг на кампанията по намаляващ брой събития Подредете данните по ранг на кампанията във възходящ ред, а след това по campaign_name в азбучен ред.
sobes.tech AI
Отговор от AI
sql WITH event_stats AS ( SELECT c.campaign_name, e.campaign_id, COUNT(*) AS total_events, COUNT(DISTINCT e.user_id) AS unique_users, MIN(e.event_time) AS first_event_time, MAX(e.event_time) AS last_event_time FROM campaigns c JOIN events e ON c.campaign_id = e.campaign_id GROUP BY c.campaign_name, e.campaign_id ), ranked AS ( SELECT campaign_name, total_events, unique_users, first_event_time, last_event_time, RANK() OVER (ORDER BY total_events DESC) AS campaign_rank FROM event_stats ) SELECT campaign_name, total_events, unique_users, first_event_time, last_event_time, campaign_rank FROM ranked ORDER BY campaign_rank ASC, campaign_name ASC;
Объяснение:
- Сначала объединяем таблицы campaigns и events по campaign_id, чтобы получить события с названиями кампаний.
- Группируем по кампании, считаем общее количество событий, уникальных пользователей, минимальное и максимальное время события.
- Используем оконную функцию RANK() для присвоения ранга по убыванию total_events.
- В итоговом запросе сортируем по возрастанию ранга и по алфавиту названия кампании.
- Кампании без событий не попадут в результат, так как мы делаем внутреннее соединение с events.
Таким образом, получаем отчет с нужными метриками и ранжированием.