Junior
Fitness klublarında ziyarətlərin analizi Siz fitness klublarının şəbəkəsində analistsiniz. İstifadəçilərin ziyarətləri və onların aldığı abunəliklər haqqında məlumatlarınız var. Abunəliklərin istifadəsinin effektivliyini təhlil etmək lazımdır. Hər abunəlik növü üçün aşağıdakıları hesablayın: • Bu abunəlik növünü istifadə edən ümumi istifadəçi sayı. Yalnız unikal user_id-ləri nəzərə alın; • Bu abunəliklə edilən ümumi ziyarətlərin sayı. Bu abunəliklə əlaqəli bütün istifadəçi ziyarətlərini nəzərə alın; • Bu abunəlik növündəki istifadəçilərin ümumi istifadəçilər sayına nisbətini faizlə (bir ondalıq ilə yuvarlaqlaşdırılmış). İstifadəçilərin nisbətini hesablamaq üçün, bu abunəlik növünə malik istifadəçi sayını ümumi unikal istifadəçi sayına bölün. Hər istifadəçi yalnız bir abunəyə sahib ola bilər. Nəticəni abunəlik növünə görə alfabetik sırayla sıralayın. Giriş formatı Cədvəl memberships: • membership_id (int) — abunəlik unikal identifikatoru • user_id (int) — istifadəçi unikal identifikatoru • membership_type (text) — abunəlik növü Cədvəl visits:
sobes.tech Süni İntellekt
AI-dan cavab
Для решения задачи анализа посещаемости фитнес-клубов по типам абонементов можно использовать SQL-запрос, который:
- Определит общее количество уникальных пользователей для каждого типа абонемента.
- Подсчитает общее количество посещений для каждого типа абонемента.
- Рассчитает долю пользователей каждого типа абонемента от общего числа уникальных пользователей.
- Отсортирует результат по типу абонемента в алфавитном порядке.
Пример запроса:
WITH user_counts AS (
SELECT
membership_type,
COUNT(DISTINCT user_id) AS users_count
FROM memberships
GROUP BY membership_type
),
visit_counts AS (
SELECT
m.membership_type,
COUNT(v.visit_id) AS visits_count
FROM visits v
JOIN memberships m ON v.user_id = m.user_id
GROUP BY m.membership_type
),
total_users AS (
SELECT COUNT(DISTINCT user_id) AS total_users FROM memberships
)
SELECT
uc.membership_type,
uc.users_count,
COALESCE(vc.visits_count, 0) AS visits_count,
ROUND( (uc.users_count::numeric / tu.total_users) * 100, 1) AS user_share_percent
FROM user_counts uc
LEFT JOIN visit_counts vc ON uc.membership_type = vc.membership_type
CROSS JOIN total_users tu
ORDER BY uc.membership_type;
Объяснение:
user_counts— количество уникальных пользователей по типам абонементов.visit_counts— количество посещений, связанных с каждым типом абонемента.total_users— общее количество уникальных пользователей.- Итоговый запрос объединяет данные и рассчитывает долю пользователей в процентах с округлением до одного знака.
Такой подход позволит получить полную картину по эффективности каждого типа абонемента.