Junior
Análisis de la asistencia a clubes de fitness Trabajas como analista en una cadena de clubes de fitness. Tienes información sobre las visitas de los usuarios y las membresías que compran. Es necesario analizar la efectividad del uso de las membresías. Calcula para cada tipo de membresía: • el número total de usuarios que usaron ese tipo de membresía. Considera solo usuarios únicos user_id; • el número total de visitas con esa membresía. Considera todas las visitas de los usuarios con esa membresía; • la proporción de usuarios de esa membresía en porcentaje respecto al total de usuarios (redondeado a un decimal). Para calcular la proporción, usa la relación entre el número de usuarios con esa membresía y el total de usuarios únicos. Cada usuario puede tener solo una membresía. Ordena el resultado por tipo de membresía en orden alfabético. Formato de entrada Tabla memberships: • membership_id (int) — identificador único de la membresía • user_id (int) — identificador único del usuario • membership_type (text) — tipo de membresía Tabla visits: • visit_id (int) — identificador único de la visita • user_id (int) — identificador del usuario • visit_date (timestamp) — fecha y hora de la visita Los datos no contienen valores faltantes o incorrectos. Formato de salida La consulta debe devolver una tabla con los siguientes campos en este orden: • membership_type (text) — tipo de membresía • users_count (int) — número de usuarios únicos con ese tipo de membresía • total_visits (int) — número total de visitas de usuarios con esa membresía • user_share (numeric) — proporción de usuarios en porcentaje con esa membresía respecto al total (redondeado a 1 decimal) El resultado se ordena por tipo de membresía en orden alfabético.
sobes.tech AI
Respuesta de la 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;