Porcentaje De Usuarios Que Participaron En Un Concurso
Escribe una soluci贸n para hallar el porcentaje de usuarios inscritos en cada concurso redondeado a dos decimales. Devuelve la tabla de resultados ordenada por porcentaje en orden descendente. En caso de empate, ordenarlo por contest_id en orden ascendente.
Table: Users
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| user_id | int |
| user_name | varchar |
+-------------+---------+
- `user_id` es la llave primaria (columna con valores 煤nicos) para esta tabla.
- Cada fila de esta tabla contiene el nombre y el id de un usuario.
Table: Register
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| contest_id | int |
| user_id | int |
+-------------+---------+
- (`contest_id`, `user_id`) es la llave primaria (combinaci贸n de columnas con valores 煤nicos) para esta tabla.
- Cada fila de esta tabla contiene el id de un usuario y el concurso al que se registraron.
El formato del resultado es el del siguiente ejemplo.
Ejemplo 1:
Entrada:
Tabla Users:
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 6 | Alice |
| 2 | Bob |
| 7 | Alex |
+---------+-----------+
Tabla Register:
+------------+---------+
| contest_id | user_id |
+------------+---------+
| 215 | 6 |
| 209 | 2 |
| 208 | 2 |
| 210 | 6 |
| 208 | 6 |
| 209 | 7 |
| 209 | 6 |
| 215 | 7 |
| 208 | 7 |
| 210 | 2 |
| 207 | 2 |
| 210 | 7 |
+------------+---------+
Salida:
+------------+------------+
| contest_id | percentage |
+------------+------------+
| 208 | 100.0 |
| 209 | 100.0 |
| 210 | 100.0 |
| 215 | 66.67 |
| 207 | 33.33 |
+------------+------------+
Explicaci贸n:
- Todos los usuarios registrados en los concursos 208, 209, y 210. El porcentaje es 100% y los ordenamos en por `contest_id` en orden ascendente.
- Alice y Alex se registraron en el concurso 215 y el porcentaje es ((2/3) * 100) = 66.67%
- Bob se registr贸 en el concurso 207 y el porcentaje es ((1/3) * 100) = 33.33%
Soluci贸n:
WITH usersCount AS (
SELECT count(*) AS totalUsers from users
)
SELECT contest_id,
ROUND(100 * count(users.user_id) / totalUsers, 2) AS percentage
FROM usersCount, register, users
WHERE users.user_id = register.user_id
GROUP BY contest_id
ORDER BY percentage DESC, contest_id ASC;