Junior
Análisis de la actividad de los usuarios en campañas publicitarias La empresa lleva un registro de eventos relacionados con campañas publicitarias. Se ingresan dos tablas: • campaigns — lista de campañas publicitarias con sus identificadores y nombres; • events — eventos de usuarios por campaña con información sobre el tipo de evento (por ejemplo, 'click' (clic en el anuncio)) y el tiempo. Es necesario crear un informe para cada campaña con los siguientes indicadores: • Número total de eventos. • Número de usuarios únicos que realizaron eventos. • Tiempo del primer y último evento por campaña. • Rango de la campaña en orden descendente por el número total de eventos. El rango es un número asignado a cada fila en el conjunto de resultados basado en el orden de los datos. Si dos o más filas tienen el mismo valor, se les asigna el mismo rango, pero se omite el siguiente rango. El informe debe incluir solo campañas que tuvieron eventos: las campañas sin eventos no se consideran. El informe final debe ordenarse primero por el rango de la campaña en orden ascendente, y luego por campaign_name en orden alfabético. Formato de entrada • campaign_name (string) — nombre de la campaña publicitaria • start_date (timestamp) — fecha y hora de inicio de la campaña • end_date (timestamp) — fecha y hora de fin de la campaña Tabla events: • event_id (int) — identificador único del evento • user_id (int) — identificador único del usuario que realizó el evento • campaign_id (int) — identificador único de la campaña • event_type (string) — tipo de evento, por ejemplo 'click' o 'conversion' • event_time (timestamp) — fecha y hora del evento Los datos no contienen valores faltantes o incorrectos. Formato de salida La consulta debe devolver una tabla con los siguientes campos en este orden: • campaign_name (string) — nombre de la campaña publicitaria • total_events (int) — número total de eventos relacionados con la campaña • unique_users (int) — número de usuarios únicos que realizaron eventos • first_event_time (timestamp) — fecha y hora del primer evento de la campaña • last_event_time (timestamp) — fecha y hora del último evento de la campaña • campaign_rank (int) — rango de la campaña en orden descendente por el número total de eventos Ordene los datos por el rango de la campaña en orden ascendente, y luego por campaign_name en orden alfabético.
sobes.tech AI
Respuesta de la IA
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.
Таким образом, получаем отчет с нужными метриками и ранжированием.