Cómo usar contar y agrupar en la misma declaración de selección
Tengo una SELECT
consulta SQL que también usa un GROUP BY
, quiero contar todos los registros después delGROUP BY
cláusula filtró el conjunto de resultados.
¿Hay alguna forma de hacer esto directamente con SQL? Por ejemplo, si tengo la tabla users
y quiero seleccionar los diferentes pueblos y el número total de usuarios:
SELECT `town`, COUNT(*)
FROM `user`
GROUP BY `town`;
Quiero tener una columna con todos los pueblos y otra con el número de usuarios en todas las filas.
Un ejemplo del resultado al tener 3 pueblos y 58 usuarios en total es:
Ciudad | Contar |
---|---|
Copenhague | 58 |
Nueva York | 58 |
Atenas | 58 |
Esto hará lo que quieras (lista de ciudades, con el número de usuarios en cada una) :
SELECT `town`, COUNT(`town`)
FROM `user`
GROUP BY `town`;
Puede utilizar la mayoría de las funciones agregadas cuando utiliza una GROUP BY
declaración ( COUNT
, MAX
, COUNT DISTINCT
etc.)
Actualización:
Puede declarar una variable para la cantidad de usuarios y guardar el resultado allí, y luego SELECT
el valor de la variable:
DECLARE @numOfUsers INT
SET @numOfUsers = SELECT COUNT(*) FROM `user`;
SELECT DISTINCT `town`, @numOfUsers FROM `user`;
Puedes usar COUNT(DISTINCT ...)
:
SELECT COUNT(DISTINCT town)
FROM user
La otra forma es:
/* Number of rows in a derived table called d1. */
select count(*) from
(
/* Number of times each town appears in user. */
select town, count(*)
from user
group by town
) d1