Sobes.tech
Junior

Analyse der Besucherzahlen in Fitnessstudios Sie arbeiten als Analyst in einer Fitnessstudio-Kette. Sie haben Informationen über die Besuche der Nutzer und die von ihnen gekauften Mitgliedschaften. Es ist notwendig, die Effektivität der Nutzung der Mitgliedschaften zu analysieren. Berechnen Sie für jeden Mitgliedschaftstyp: • die Gesamtzahl der Nutzer, die diesen Mitgliedschaftstyp genutzt haben. Berücksichtigen Sie nur eindeutige user_id; • die Gesamtzahl der Besuche mit dieser Mitgliedschaft. Berücksichtigen Sie alle Besuche der Nutzer mit dieser Mitgliedschaft; • den Anteil der Nutzer dieser Mitgliedschaft in Prozent am Gesamtzahl aller Nutzer (auf eine Dezimalstelle gerundet). Zur Berechnung des Nutzeranteils verwenden Sie das Verhältnis der Nutzer mit dieser Mitgliedschaft zur Gesamtzahl der eindeutigen Nutzer. Jeder Nutzer kann nur eine Mitgliedschaft haben. Sortieren Sie das Ergebnis nach Mitgliedschaftstyp in alphabetischer Reihenfolge. Eingabeformat Tabelle memberships: • membership_id (int) — eindeutiger Bezeichner der Mitgliedschaft • user_id (int) — eindeutiger Bezeichner des Nutzers • membership_type (text) — Typ der Mitgliedschaft Tabelle visits:

sobes.tech KI

Antwort von AI

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

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