Junior
Reklam kampaniyalari bo'yicha foydalanuvchilar faoliyatini tahlil qilish Kompaniya reklama kampaniyalari bilan bog'liq voqealarni hisobga oladi. Ikkita jadval taqdim etilgan: • campaigns — reklama kampaniyalari ro'yxati, ularning identifikatorlari va nomlari bilan; • events — kampaniyalarga oid foydalanuvchi voqealari, voqea turi (masalan, 'click' (bosish)) va vaqt bilan. Har bir kampaniya uchun quyidagi ko'rsatkichlar bilan hisobot tayyorlash kerak: • Umumiy voqealar soni. • Voqealarni amalga oshirgan yagona foydalanuvchilar soni. • Kampaniya bo'yicha birinchi va oxirgi voqea vaqti. • Kampaniya reytingi, umumiy voqealar soniga ko'ra kamayish tartibida. Reyting har bir satrga ma'lumotlar asosida berilgan raqamdir. Agar ikki yoki undan ortiq satrda bir xil qiymat bo'lsa, ular bir xil reyting oladi, ammo keyingi reyting o'tkazib yuboriladi. Hisobot faqat voqeasi bo'lgan kampaniyalarni o'z ichiga oladi: voqeasi bo'lmagan kampaniyalar hisobga olinmaydi. Yakuniy hisobot avval kampaniya reytingiga ko'ra o'sish tartibida, keyin campaign_name bo'yicha alfavit tartibida bo'lishi kerak. Kirish formati • campaign_name (string) — reklama kampaniyasining nomi • start_date (timestamp) — kampaniyaning boshlanish vaqti • end_date (timestamp) — kampaniyaning tugash vaqti Eventlar jadvali: • event_id (int) — voqea uchun yagona identifikator • user_id (int) — voqeani amalga oshirgan foydalanuvchining yagona identifikatori • campaign_id (int) — kampaniyaning yagona identifikatori • event_type (string) — voqea turi, masalan, 'click' yoki 'conversion' • event_time (timestamp) — voqea vaqti Ma'lumotlar bo'sh yoki noto'g'ri qiymatlarni o'z ichiga olmaydi. Chiqish formati So'rov quyidagi maydonlarni o'z ichiga olgan jadvalni qaytarishi kerak: • campaign_name (string) — reklama kampaniyasining nomi • total_events (int) — kampaniya bilan bog'liq umumiy voqealar soni • unique_users (int) — voqealarni amalga oshirgan yagona foydalanuvchilar soni • first_event_time (timestamp) — kampaniyaning birinchi voqeasi vaqti • last_event_time (timestamp) — kampaniyaning oxirgi voqeasi vaqti • campaign_rank (int) — umumiy voqealar soniga ko'ra kampaniya reytingi Ma'lumotlarni kampaniya reytingiga ko'ra o'sish tartibida, va keyin campaign_name bo'yicha alfavit tartibida saralang.
sobes.tech AI
AIdan javob
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.
Таким образом, получаем отчет с нужными метриками и ранжированием.