Sobes.tech
Junior

Анализ на посещаемостта на фитнес клубов Вие работите като анализатор в мрежа от фитнес клубове. Имаме информация за посещенията на потребителите и за закупените от тях абонаменти. Необходимо е да анализирате ефективността на използването на абонаментите. Изчислете за всеки тип абонамент: • общия брой потребители, използвали този тип абонамент. Вземете предвид само уникалните user_id; • общия брой посещения за този абонамент. Вземете предвид всички посещения на потребителите с този абонамент; • делът на потребителите с този абонамент в проценти от общия брой потребители (закръглен до една десета). За изчисление използвайте отношението между броя на потребителите с този абонамент и общия брой на уникалните потребители. Всеки потребител може да има само един абонамент. Резултатът сортирайте по тип на абонамента в азбучен ред. Формат на входа Таблица memberships: • membership_id (int) — уникален идентификатор на абонамента • user_id (int) — уникален идентификатор на потребителя • membership_type (text) — тип на абонамента Таблица visits: • visit_id (int) — уникален идентификатор на посещението • user_id (int) — идентификатор на потребителя • visit_date (timestamp) — дата и час на посещението Данните не съдържат пропуски или некоректни стойности. Формат на изхода Заявката трябва да върне таблица с полетата в следния ред: • membership_type (text) — тип на абонамента • users_count (int) — брой уникални потребители с този тип абонамент • total_visits (int) — общ брой посещения на тези потребители • user_share (numeric) — делът на потребителите с този тип абонамент в проценти от общия брой, закръглен до една десета Резултатът трябва да бъде сортиран по тип на абонамента в азбучен ред.

sobes.tech AI

Отговор от 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;