Junior
Reklam kampanyalarında kullanıcı etkinliği analizi Şirket, reklam kampanyalarıyla ilgili olayların kaydını tutmaktadır. İki tablo sağlanmıştır: • campaigns — reklam kampanyalarının listesi, kimlikleri ve isimleri ile; • events — kampanyalara göre kullanıcı olayları, olay türü (örneğin 'click' (tıklama)) ve zaman bilgisi ile. Her kampanya için aşağıdaki göstergelerle bir rapor oluşturulması gerekmektedir: • Toplam olay sayısı. • Olayları gerçekleştiren benzersiz kullanıcı sayısı. • Kampanya başına ilk ve son olay zamanı. • Toplam olay sayısına göre azalan sırayla kampanya sıralaması. Sıralama, sonuç kümesinde her satıra verilen bir sayıdır. Eğer iki veya daha fazla satır aynı değere sahipse, aynı sıralamayı alırlar, ancak sonraki sıralama atlanır. Sadece olayları olan kampanyalar rapora dahil edilmelidir: olay olmayan kampanyalar dikkate alınmaz. Son rapor, önce kampanya sıralamasına göre artan sırayla, ardından campaign_name'e göre alfabetik sırayla sıralanmalıdır. Giriş formatı • campaign_name (string) — reklam kampanyasının adı • start_date (timestamp) — kampanyanın başlama tarihi ve saati • end_date (timestamp) — kampanyanın bitiş tarihi ve saati events tablosu: • event_id (int) — olayın benzersiz kimliği • user_id (int) — olayı gerçekleştiren kullanıcının benzersiz kimliği • campaign_id (int) — kampanyanın benzersiz kimliği • event_type (string) — olay türü, örneğin 'click' veya 'conversion' • event_time (timestamp) — olayın tarihi ve saati Veriler eksik veya yanlış değer içermemektedir. Çıktı formatı Sorgu, aşağıdaki alanları sırasıyla içeren bir tablo döndürmelidir: • campaign_name (string) — reklam kampanyasının adı • total_events (int) — kampanyayla ilişkili toplam olay sayısı • unique_users (int) — olayları gerçekleştiren benzersiz kullanıcı sayısı • first_event_time (timestamp) — kampanyanın ilk olayı tarihi ve saati • last_event_time (timestamp) — kampanyanın son olayı tarihi ve saati • campaign_rank (int) — toplam olay sayısına göre kampanya sıralaması Verileri, kampanya sıralamasına göre artan sırayla ve ardından campaign_name'e göre alfabetik sırayla sıralayın.
sobes.tech yapay zeka
AI'dan gelen yanıt
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.
Таким образом, получаем отчет с нужными метриками и ранжированием.