Sobes.tech
Junior

Fitness klublarga tashriflar statistikasi Siz fitness klublar tarmog‘ida tahlilchi sifatida ishlayapsiz. Sizda foydalanuvchilarning tashriflari va ular sotib olgan obunalar haqida ma’lumotlar mavjud. Obunalar samaradorligini tahlil qilish zarur. Har bir obuna turi uchun: • bu obuna turidan foydalangan yagona user_id lar soni; • bu obuna bilan bo‘lib o‘tgan umumiy tashriflar soni; • bu obuna bilan bo‘lib o‘tgan foydalanuvchilar ulushi umumiy foydalanuvchilar soniga nisbatan foizda (bir o‘nlikdan keyin yaxlitlangan). Ulushni hisoblash uchun, bu obuna bilan bo‘lib o‘tgan foydalanuvchilar sonini umumiy yagona foydalanuvchilar soniga bo‘ling. Har bir foydalanuvchining faqat bitta obunasi bo‘lishi mumkin. Natijani obuna turi bo‘yicha alfavit tartibida saralang. Kiritish formati Memberships jadvali: • membership_id (int) — obuna identifikatori • user_id (int) — foydalanuvchi identifikatori • membership_type (text) — obuna turi Visits jadvali: • visit_id (int) — tashrif identifikatori • user_id (int) — foydalanuvchi identifikatori • visit_date (timestamp) — tashrif sanasi va vaqti Ma’lumotlar bo‘sh yoki noto‘g‘ri qiymatlarni o‘z ichiga olmaydi. Chiqish formati So‘rov quyidagi ustunlar bilan jadvalni qaytarishi kerak: • membership_type (text) — obuna turi • users_count (int) — bu obuna turiga ega yagona foydalanuvchilar soni • total_visits (int) — bu obuna bilan bo‘lib o‘tgan umumiy tashriflar soni • user_share (numeric) — bu obuna bilan bo‘lib o‘tgan foydalanuvchilar ulushi foizda, bir o‘nlikdan keyin yaxlitlangan Natija obuna turi bo‘yicha alfavit tartibida saralanadi.

sobes.tech AI

AIdan javob

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;