Sobes.tech
Junior

Analyse de la fréquentation des clubs de fitness Vous travaillez en tant qu'analyste dans une chaîne de clubs de fitness. Vous disposez d'informations sur les visites des utilisateurs et les abonnements qu'ils achètent. Il est nécessaire d'analyser l'efficacité de l'utilisation des abonnements. Calculez pour chaque type d'abonnement : • le nombre total d'utilisateurs ayant utilisé ce type d'abonnement. Ne considérez que les user_id uniques; • le nombre total de visites pour cet abonnement. Considérez toutes les visites des utilisateurs avec cet abonnement; • la part des utilisateurs de cet abonnement en pourcentage du nombre total de tous les utilisateurs (arrondi à un chiffre après la virgule). Pour calculer la part des utilisateurs, utilisez le rapport entre le nombre d'utilisateurs avec cet abonnement et le nombre total d'utilisateurs uniques. Chaque utilisateur ne peut avoir qu'un seul abonnement. Triez le résultat par type d'abonnement par ordre alphabétique. Format d'entrée Table memberships: • membership_id (int) — identifiant unique de l'abonnement • user_id (int) — identifiant unique de l'utilisateur • membership_type (text) — type d'abonnement Table visits:

sobes.tech IA

Réponse de l'IA

Для решения задачи анализа посещаемости фитнес-клубов по типам абонементов можно использовать 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 — общее количество уникальных пользователей.
  • Итоговый запрос объединяет данные и рассчитывает долю пользователей в процентах с округлением до одного знака.

Такой подход позволит получить полную картину по эффективности каждого типа абонемента.