Junior
Analýza návštěvnosti fitness klubů Pracujete jako analytik v síti fitness klubů. Máte informace o návštěvách uživatelů a o zakoupených členstvích. Je třeba analyzovat efektivitu využívání členství. Vypočítejte pro každý typ členství: • celkový počet uživatelů, kteří tento typ členství využili. Zohledněte pouze unikátní user_id; • celkový počet návštěv s tímto členstvím. Zohledněte všechny návštěvy uživatelů s tímto členstvím; • podíl uživatelů tohoto členství v procentech z celkového počtu uživatelů (zaokrouhleno na jedno desetinné místo). Pro výpočet podílu použijte poměr počtu uživatelů s tímto členstvím k celkovému počtu unikátních uživatelů. Každý uživatel může mít pouze jedno členství. Seřaďte výsledek podle typu členství v abecedním pořadí. Formát vstupu Tabulka memberships: • membership_id (int) — unikátní identifikátor členství • user_id (int) — unikátní identifikátor uživatele • membership_type (text) — typ členství Tabulka visits: • visit_id (int) — unikátní identifikátor návštěvy • user_id (int) — identifikátor uživatele • visit_date (timestamp) — datum a čas návštěvy Data neobsahují chybějící nebo nesprávné hodnoty. Formát výstupu Dotaz by měl vrátit tabulku s poli v tomto pořadí: • membership_type (text) — typ členství • users_count (int) — počet unikátních uživatelů s tímto typem členství • total_visits (int) — celkový počet návštěv uživatelů s tímto členstvím • user_share (numeric) — podíl uživatelů v procentech s tímto členstvím od celkového počtu (zaokrouhleno na 1 desetinné místo) Výsledek je seřazen podle typu členství v abecedním pořadí.
sobes.tech AI
Odpověď 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;