Junior
79
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 d’utilisateurs (arrondi à un chiffre après la virgule). Pour calculer la part, 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 : • visit_id (int) — identifiant unique de la visite • user_id (int) — identifiant de l’utilisateur • visit_date (timestamp) — date et heure de la visite Les données ne contiennent pas de valeurs manquantes ou incorrectes. Format de sortie La requête doit retourner une table avec les champs dans cet ordre : • membership_type (text) — type d’abonnement • users_count (int) — nombre d’utilisateurs uniques avec ce type d’abonnement • total_visits (int) — nombre total de visites des utilisateurs avec cet abonnement • user_share (numeric) — part des utilisateurs en pourcentage avec cet abonnement par rapport au total (arrondi à 1 décimale) Le résultat est trié par type d’abonnement par ordre alphabétique.
Entreprises à qui on a demandé
01.tech
Réponse de l'IA
sobes.tech 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;