Sobes.tech
Junior

Análise de frequência de visitas a clubes de fitness Você trabalha como analista numa rede de clubes de fitness. Você possui informações sobre as visitas dos utilizadores e os tipos de assinatura que eles compram. É necessário analisar a eficácia do uso das assinaturas. Calcule para cada tipo de assinatura: • o número total de utilizadores que usaram esse tipo de assinatura. Considere apenas user_id únicos; • o número total de visitas por essa assinatura. Considere todas as visitas dos utilizadores com essa assinatura; • a proporção de utilizadores dessa assinatura em percentagem do total de utilizadores (arredondada para uma casa decimal). Para calcular a proporção, use a relação entre o número de utilizadores com essa assinatura e o total de utilizadores únicos. Cada utilizador pode ter apenas uma assinatura. Ordene o resultado por tipo de assinatura em ordem alfabética. Formato de entrada Tabela memberships: • membership_id (int) — identificador único da assinatura • user_id (int) — identificador único do utilizador • membership_type (text) — tipo de assinatura Tabela visits: • visit_id (int) — identificador único da visita • user_id (int) — identificador do utilizador • visit_date (timestamp) — data e hora da visita Os dados não contêm valores ausentes ou incorretos. Formato de saída A consulta deve retornar uma tabela com os seguintes campos na ordem: • membership_type (text) — tipo de assinatura • users_count (int) — número de utilizadores únicos com esse tipo de assinatura • total_visits (int) — número total de visitas desses utilizadores • user_share (numeric) — proporção de utilizadores com esse tipo de assinatura em percentagem do total, arredondada a uma casa decimal O resultado deve ser ordenado por tipo de assinatura em ordem alfabética.

sobes.tech IA

Resposta da IA

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;