Junior
Analisi della frequentazione dei club di fitness Lavori come analista in una catena di club di fitness. Hai informazioni sulle visite degli utenti e sugli abbonamenti che acquistano. È necessario analizzare l’efficacia dell’utilizzo degli abbonamenti. Calcola per ogni tipo di abbonamento: • il numero totale di utenti che hanno utilizzato questo tipo di abbonamento. Considera solo user_id unici; • il numero totale di visite con questo abbonamento. Considera tutte le visite degli utenti con questo abbonamento; • la quota di utenti di questo abbonamento in percentuale rispetto al totale di utenti (arrotondata a un decimale). Per calcolare la quota, usa il rapporto tra il numero di utenti con questo abbonamento e il numero totale di utenti unici. Ogni utente può avere solo un abbonamento. Ordina il risultato per tipo di abbonamento in ordine alfabetico. Formato di input Tabella memberships: • membership_id (int) — identificativo unico dell’abbonamento • user_id (int) — identificativo unico dell’utente • membership_type (text) — tipo di abbonamento Tabella visits: • visit_id (int) — identificativo unico della visita • user_id (int) — identificativo dell’utente • visit_date (timestamp) — data e ora della visita I dati non contengono valori mancanti o errati. Formato di output La query deve restituire una tabella con i campi in questo ordine: • membership_type (text) — tipo di abbonamento • users_count (int) — numero di utenti unici con questo tipo di abbonamento • total_visits (int) — numero totale di visite degli utenti con questo abbonamento • user_share (numeric) — quota di utenti in percentuale con questo abbonamento rispetto al totale (arrotondata a 1 decimale) Il risultato viene ordinato per tipo di abbonamento in ordine alfabetico.
sobes.tech AI
Risposta dell'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;