Sobes.tech
Junior
74

Fizinio klubų lankomumo analizė Jūs dirbate kaip analitikas fitneso klubų tinkle. Turite informacijos apie naudotojų lankomumą ir jų įsigytas narystes. Reikia analizuoti narystės efektyvumą. Apskaičiuokite kiekvieno narystės tipo: • bendrą naudotojų, naudojusių šį narystės tipą, skaičių. Laikykitės tik unikalių user_id; • bendrą vizitų skaičių su šia naryste. Laikykitės visų naudotojų vizitų su šia naryste; • naudotojų, turinčių šią narystę, dalį procentais nuo visų naudotojų skaičiaus (apvalinta iki vieno skaitmens po kablelio). Skaičiuokite naudodami santykį tarp naudotojų su šia naryste ir visų unikalių naudotojų. Kiekvienas naudotojas gali turėti tik vieną narystę. Rezultatą rūšiuokite pagal narystės tipą abėcėlės tvarka. Įvesties formatas Narystės lentelė: • membership_id (int) — unikalus narystės identifikatorius • user_id (int) — naudotojo identifikatorius • membership_type (text) — narystės tipas Lankymosi lentelė: • visit_id (int) — lankymosi unikalus identifikatorius • user_id (int) — naudotojo identifikatorius • visit_date (timestamp) — lankymosi data ir laikas Duomenys neturi tuščių ar klaidingų reikšmių. Išvesties formatas Užklausa turi grąžinti lentelę su laukais tokiu tvarką: • membership_type (text) — narystės tipas • users_count (int) — unikalių naudotojų, turinčių šį narystės tipą, skaičius • total_visits (int) — bendras lankymosi įvykių skaičius su šia naryste • user_share (numeric) — naudotojų dalis procentais nuo bendro naudotojų skaičiaus (apvalinta iki 1 skaitmens po kablelio) Rezultatas rūšiuojamas pagal narystės tipą abėcėlės tvarka.

Įmonės kur klausė
01.tech

Atsakymas iš AI

sobes.tech 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;