Problema:
Agregaste datos en grupos, pero deseas ordenar los registros en orden descendente por la cantidad de elementos en los grupos.
Ejemplo:
Nuestra base de datos tiene una tabla llamada user
con datos en las siguientes columnas:id
, first_name
, last_name
y country
.
id | nombre | apellido | país |
---|---|---|---|
1 | Lisa | Williams | Inglaterra |
2 | Gary | Andres | Polonia |
3 | Tom | Williams | Polonia |
4 | Miguel | Marrón | Francia |
5 | Susana | Smith | Estados Unidos |
6 | Ana | Jones | Estados Unidos |
7 | Ellie | Molinero | Polonia |
Vamos a crear un informe sobre nuestros usuarios. Agruparemos los resultados por country
y contar el número de usuarios de cada país. Pero también ordenaremos los grupos en orden descendente por número de usuarios. De esa forma, los países con mayor número de usuarios aparecerán en la parte superior.
Solución:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id) DESC ;
país | cuenta(id) |
---|---|
Polonia | 3 |
EE.UU. | 2 |
Inglaterra | 1 |
Francia | 1 |
Discusión:
Para ordenar los registros seleccionados por el número de elementos en cada grupo, utilice el ORDER BY
cláusula.
El primer paso es usar el GROUP BY
cláusula para crear los grupos (en nuestro ejemplo, agrupamos por el country
columna). Luego, en la cláusula ORDER BY, usa la función agregada COUNT, que cuenta el número de valores en la columna de su elección; en nuestro ejemplo, contamos identificaciones distintas con COUNT(id)
. Esto cuenta efectivamente el número de elementos en cada grupo. El ORDER BY
luego ordena los grupos de acuerdo con ese cálculo.
Como de costumbre, puede usar tanto el orden ascendente como el descendente con ORDER BY
. Si desea un orden descendente (como en este ejemplo), use el DESC
palabra clave. El orden ascendente no necesita ninguna palabra clave porque es el predeterminado, pero puede usar el ASC
palabra clave si desea ser explícito. Este es el mismo ejemplo pero con los resultados ordenados en orden ascendente:
Solución:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id);
Aquí está el resultado:
país | cuenta(id) |
---|---|
Inglaterra | 1 |
Francia | 1 |
EE.UU. | 2 |
Polonia | 3 |