Cómo usar contar y agrupar en la misma declaración de selección

Resuelto Stavros asked hace 14 años • 11 respuestas

Tengo una SELECTconsulta 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 usersy 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
Stavros avatar Apr 27 '10 22:04 Stavros
Aceptado

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 BYdeclaración ( COUNT, MAX, COUNT DISTINCTetc.)

Actualización: Puede declarar una variable para la cantidad de usuarios y guardar el resultado allí, y luego SELECTel valor de la variable:

DECLARE @numOfUsers INT
SET @numOfUsers = SELECT COUNT(*) FROM `user`;

SELECT DISTINCT `town`, @numOfUsers FROM `user`;
Oded avatar Apr 27 '2010 15:04 Oded

Puedes usar COUNT(DISTINCT ...):

SELECT COUNT(DISTINCT town) 
FROM user
milkovsky avatar Jun 11 '2014 12:06 milkovsky

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
ZhenYu Wang avatar Oct 15 '2013 00:10 ZhenYu Wang