Junior
Analiza frekwencji w klubach fitness Pracujesz jako analityk w sieci klubów fitness. Masz informacje o wizytach użytkowników i zakupionych przez nich abonamentach. Należy przeanalizować skuteczność korzystania z abonamentów. Oblicz dla każdego typu abonamentu: • łączną liczbę użytkowników, którzy korzystali z tego typu abonamentu. Uwzględniaj tylko unikalne user_id; • łączną liczbę wizyt tych użytkowników. Uwzględniaj wszystkie wizyty użytkowników z tym abonamentem; • udział użytkowników tego abonamentu w procentach od ogólnej liczby użytkowników (zaokrąglony do jednego miejsca po przecinku). Do obliczenia udziału użyj stosunku liczby użytkowników z tym abonamentem do ogólnej liczby unikalnych użytkowników. Każdy użytkownik może mieć tylko jeden abonament. Posortuj wynik według typu abonamentu w porządku alfabetycznym. Format wejścia Tabela memberships: • membership_id (int) — unikalny identyfikator abonamentu • user_id (int) — unikalny identyfikator użytkownika • membership_type (text) — typ abonamentu Tabela visits: • visit_id (int) — unikalny identyfikator wizyty • user_id (int) — identyfikator użytkownika • visit_date (timestamp) — data i czas wizyty Dane nie zawierają braków ani nieprawidłowych wartości. Format wyjścia Zapytanie powinno zwrócić tabelę z polami w takiej kolejności: • membership_type (text) — typ abonamentu • users_count (int) — liczba unikalnych użytkowników z tym typem abonamentu • total_visits (int) — łączna liczba wizyt użytkowników z tym abonamentem • user_share (numeric) — udział użytkowników w procentach z tym abonamentem od ogólnej liczby (zaokrąglony do 1 miejsca po przecinku) Wynik sortuje się według typu abonamentu w porządku alfabetycznym.
sobes.tech AI
Odpowiedź od 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;