Junior
Analiza frecvenței vizitelor în cluburile de fitness Lucrați ca analist într-o rețea de cluburi de fitness. Aveți informații despre vizitele utilizatorilor și abonamentele pe care le cumpără. Este necesar să analizați eficiența utilizării abonamentelor. Calculați pentru fiecare tip de abonament: • numărul total de utilizatori care au folosit acest tip de abonament. Luați în considerare doar user_id unice; • numărul total de vizite pentru acest abonament. Luați în considerare toate vizitele utilizatorilor cu acest abonament; • proporția utilizatorilor acestui abonament în procent din numărul total de utilizatori (rotunjit la o zecimală). Pentru calcul, folosiți raportul dintre numărul de utilizatori cu acest abonament și numărul total de utilizatori unici. Fiecare utilizator poate avea doar un abonament. Sortați rezultatul după tipul abonamentului în ordine alfabetică. Formatul de intrare Tabelul memberships: • membership_id (int) — identificator unic al abonamentului • user_id (int) — identificator unic al utilizatorului • membership_type (text) — tipul abonamentului Tabelul visits: • visit_id (int) — identificator unic al vizitei • user_id (int) — identificator al utilizatorului • visit_date (timestamp) — data și ora vizitei Datele nu conțin valori lipsă sau incorecte. Formatul de ieșire Interogarea trebuie să returneze un tabel cu următoarele câmpuri în această ordine: • membership_type (text) — tipul abonamentului • users_count (int) — numărul de utilizatori unici cu acest tip de abonament • total_visits (int) — numărul total de vizite ale acestor utilizatori • user_share (numeric) — proporția utilizatorilor cu acest tip de abonament în procent din total, rotunjită la o zecimală Rezultatul trebuie sortat după tipul abonamentului în ordine alfabetică.
sobes.tech AI
Răspuns de la 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;