Junior
Analyse van bezoekersaantallen in fitnessclubs Je werkt als analist bij een netwerk van fitnessclubs. Je hebt informatie over gebruikersbezoeken en de abonnementen die ze kopen. Het is nodig om de effectiviteit van het gebruik van abonnementen te analyseren. Bereken voor elk type abonnement: • het totale aantal gebruikers dat dit type abonnement heeft gebruikt. Alleen unieke user_id's overwegen; • het totale aantal bezoeken door dit abonnement. Alle bezoeken van gebruikers met dit abonnement overwegen; • het aandeel van gebruikers van dit abonnement in procenten van het totale aantal gebruikers (afgerond op één decimaal). Gebruik voor de berekening de verhouding tussen het aantal gebruikers met dit abonnement en het totale aantal unieke gebruikers. Elke gebruiker kan slechts één abonnement hebben. Sorteer het resultaat op alfabetische volgorde van het abonnements type. Invoerformaat Tabel memberships: • membership_id (int) — uniek identificatienummer van het abonnement • user_id (int) — uniek identificatienummer van de gebruiker • membership_type (text) — type abonnement Tabel visits: • visit_id (int) — uniek identificatienummer van het bezoek • user_id (int) — identificatienummer van de gebruiker • visit_date (timestamp) — datum en tijd van het bezoek De gegevens bevatten geen ontbrekende of onjuiste waarden. Uitvoerformaat De query moet een tabel retourneren met de volgende velden in deze volgorde: • membership_type (text) — type abonnement • users_count (int) — aantal unieke gebruikers met dit type abonnement • total_visits (int) — totaal aantal bezoeken van deze gebruikers • user_share (numeric) — aandeel van gebruikers van dit type abonnement in procenten van het totaal, afgerond op één decimaal De resultaten worden gesorteerd op alfabetische volgorde van het abonnements type.
sobes.tech AI
Antwoord van AI
sql WITH user_counts AS ( SELECT membership_type, COUNT(DISTINCT user_id) AS users_count FROM memberships GROUP BY membership_type ),
total_users AS ( SELECT COUNT(DISTINCT user_id) AS total FROM memberships ),
visits_count AS ( SELECT m.membership_type, COUNT(v.visit_id) AS total_visits FROM visits v JOIN memberships m ON v.user_id = m.user_id GROUP BY m.membership_type )
SELECT uc.membership_type, uc.users_count, COALESCE(vc.total_visits, 0) AS total_visits, ROUND((uc.users_count::numeric / t.total) * 100, 1) AS user_share FROM user_counts uc JOIN total_users t ON true LEFT JOIN visits_count vc ON uc.membership_type = vc.membership_type ORDER BY uc.membership_type;