Junior
Analyse van gebruikersactiviteit in reclamecampagnes Het bedrijf houdt een registratie bij van gebeurtenissen gerelateerd aan reclamecampagnes. Er worden twee tabellen verstrekt: • campaigns — lijst van reclamecampagnes met hun identificaties en namen; • events — gebeurtenissen van gebruikers per campagne met informatie over het type gebeurtenis (bijvoorbeeld 'click' (klik)) en de tijd. Het is nodig om voor elke campagne een rapport te maken met de volgende indicatoren: • Totaal aantal gebeurtenissen. • Aantal unieke gebruikers die gebeurtenissen hebben uitgevoerd. • Tijd van de eerste en laatste gebeurtenis per campagne. • Rangorde van de campagne op basis van het afnemende totale aantal gebeurtenissen. Rangorde is een nummer dat aan elke rij in de resultaatset wordt toegekend op basis van de gegevensvolgorde. Als twee of meer rijen dezelfde waarde hebben, krijgen ze dezelfde rang, maar wordt de volgende rang overgeslagen. Het rapport moet alleen campagnes bevatten die gebeurtenissen hebben gehad: campagnes zonder gebeurtenissen worden niet meegenomen. De uiteindelijke rapportage moet eerst gesorteerd worden op de rangorde van de campagne in oplopende volgorde, en vervolgens op campaign_name in alfabetische volgorde. Invoerformaat • campaign_name (string) — naam van de reclamecampagne • start_date (timestamp) — startdatum en -tijd van de campagne • end_date (timestamp) — einddatum en -tijd van de campagne Tabel events: • event_id (int) — unieke identificatie van het evenement • user_id (int) — unieke identificatie van de gebruiker die het evenement heeft uitgevoerd • campaign_id (int) — unieke identificatie van de campagne • event_type (string) — type gebeurtenis, bijvoorbeeld 'click' of 'conversion' • event_time (timestamp) — datum en tijd van het evenement De gegevens bevatten geen ontbrekende of onjuiste waarden. Uitvoerformaat De query moet een tabel retourneren met de velden in deze volgorde: • campaign_name (string) — naam van de reclamecampagne • total_events (int) — totaal aantal gebeurtenissen gerelateerd aan de campagne • unique_users (int) — aantal unieke gebruikers die gebeurtenissen hebben uitgevoerd • first_event_time (timestamp) — datum en tijd van de eerste gebeurtenis van de campagne • last_event_time (timestamp) — datum en tijd van de laatste gebeurtenis van de campagne • campaign_rank (int) — rangorde van de campagne op basis van het afnemende totale aantal gebeurtenissen Sorteer de gegevens op de rangorde van de campagne in oplopende volgorde, en vervolgens op campaign_name in alfabetische volgorde.
sobes.tech AI
Antwoord van 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.
Таким образом, получаем отчет с нужными метриками и ранжированием.