Soluci贸n
Base de datos
Vista general
Queremos encontrar el total de seguidores para cada usuario en este problema.
(
user_id
,follower_id
) es la llave primaria para esta tabla.
Lo cual implica que tendremos una combinaci贸n 煤nica de user_id
y follower_id
. Por ejemplo, la siguiente
tabla contiene valores corruptos:
user_id | follower_id |
---|---|
1 | 2 |
1 | 2 |
La misma combinaci贸n de user_id
y follower_id
no puede ocurrir multiples veces.
En la siguiente tabla, el usuario con id = 1
tiene tres seguidores.
user_id | follower_id |
---|---|
1 | 2 |
1 | 3 |
1 | 4 |
3 | 2 |
3 | 5 |
En seguida, nos aseguramos que los usuarios en nuestro resultado se ordenen por user_id
en orden ascendente.
Para este ejemplo, el resultado debe ser el siguiente:
+---------+-----------------+
| user_id | followers_count |
+---------+-----------------+
| 1 | 3 |
| 3 | 2 |
+---------+-----------------+
Estrateg铆a: COUNT y GROUP BY
Intuici贸n
Esencialmente necesitamos contar el n煤mero de veces que un user_id
particular aparece en la columna user_id
y este recuento ser谩 igual al recuento de seguidores. Esto se debe a que cada combinaci贸n (user_id
,
follower_id
) es 煤nica. Podemos lograr esto con la funci贸n COUNT
para contar las apariciones de un 煤nico
user_id
. Recuerde que COUNT
es una funci贸n de agregaci贸n, por lo que tenemos que indicarle por qu茅 campo
debe realizar la agregaci贸n. Esto puede hacerse utilizando la cl谩usula GROUP BY
. Como queremos imprimir el
user_id
y su conteo en la tabla, debemos tambi茅n agrupar por user_id
.
Por 煤ltimo, usaremos la cl谩usula ORDER BY
para ordenar el resultado por user_id
.
Algoritmo
SELECT user_id, COUNT(user_id) AS followers_count
: Esta parte especifica las columnas que se seleccionar谩n en el conjunto de resultados. En este caso, queremos recuperar eluser_id
y el recuento de seguidores de cada usuario. La funci贸nCOUNT(user_id)
se utiliza para contar el n煤mero de filas de la tabla de seguidores, que representa el n煤mero de seguidores de un usuario concreto. El resultado de este recuento se denominafollowers_count
para ajustarse a los requisitos de salida del problema.FROM followers
: Esta parte especifica la tabla que contiene la informaci贸n que estamos consultando.GROUP BY user_id
: Esta parte agrupa las filas en base a la columnauser_id
. Al usarGROUP BY
, la consulta calcular谩 el total de seguidores para cadauser_id
煤nico. Como resultado tendremos una sola fila para cadauser_id
.ORDER BY user_id ASC
: Esta parte ordena el resultado en base a la columnauser_id
en orden ascendente.ASC
significa orden ascendente. Como nota: el orden por default que usar la cl谩usulaORDER BY
es ascendente. De modo que si quitamosASC
, la consulta sigue funcionando como se espera.
Implementaci贸n
SELECT user_id, COUNT(user_id) AS followers_count
FROM followers
GROUP BY user_id
ORDER BY user_id ASC;