Cuente cuántas filas tienen el mismo valor

80

¿Cómo escribo una consulta SQL para contar el número total de un valor numérico específico en la columna num de una tabla?

por ejemplo, seleccione donde num = 1

resultado: 2

+-----+-----+
| NAME | NUM |
+=====+=====+
| SAM  |  1  | 
+-----+-----+
| BOB  |  1  |
+-----+-----+
| JAKE |  2  | 
+-----+-----+  
| JOHN |  4  | 
+-----+-----+
usuario2273278
fuente
@randomstring Tener una referencia sobre mi respuesta, y
tocar
@Luv, he votado a favor de tu respuesta. esta pregunta es un grupo # @ $ @ debido a la ambigüedad y simplicidad.
nigromante
¿Qué motiva tantas respuestas duplicadas a una pregunta tan simple pero mal planteada? suspiro ... debe evitar mirar en el proceso de elaboración de salchichas!
nigromante

Respuestas:

131

Tratar

SELECT NAME, count(*) as NUM FROM tbl GROUP BY NAME

Violín SQL

Meherzad
fuente
4
Si es necesario filtrar también por número de recuento específico, digamos que obtenga solo menos de 10 o más de 25, puede usar el HAVINGoperador, comoGROUP BY ... HAVING COUNT(*) > ...
BotanMan
17

Si desea obtener el resultado para todos los valores de NUM:

SELECT `NUM`, COUNT(*) AS `count` 
FROM yourTable
GROUP BY `NUM`

O solo para uno específico:

SELECT `NUM`, COUNT(*) AS `count` 
FROM yourTable
WHERE `NUM`=1
Sirko
fuente
13

PARA NÚMERO ESPECÍFICO:

SELECT COUNT(1) FROM YOUR_TABLE WHERE NUM = 1

PARA TODOS LOS NUM:

SELECT NUM, COUNT(1) FROM YOUR_TABLE GROUP BY NUM
Dhwani
fuente
10
SELECT 
   COUNT(NUM) as 'result' 
FROM 
   Table1 
GROUP BY 
   NUM 
HAVING NUM = 1
Deval Shah
fuente
@necromante, por favor explique, ¿por qué se necesita aquí? no tiene sentido usar tener en este contexto. Si lo estaba usando para comparar el agregado, entonces valía la pena votar.
Nick N.
1
@NickN. having num = 1es equivalente a where num = , por lo que no está mal y no es "no tiene sentido". Pensé que era refrescantemente diferente hacerlo de esta manera en lugar de hacerlo de la manera más convencional where. La equivalencia no es obvia a primera vista, así que te animo a que la pruebes tú mismo.
nigromante
@necromante sigo sin verlo, ya que wherees lo mismo, ¿para qué usarlo having?
Nick N.
5
@NickN. havinges para criterios a nivel de grupo; wherees para criterios de nivel de fila. No se pueden intercambiar en general. Sin embargo, en este caso límite especial, se pueden intercambiar. Por tanto, la salida es la misma. Pero, filosóficamente, lo considero NUMun criterio a nivel de grupo, ya que el grupo se hace sobre NUMsí mismo. Por eso lo agradezco en havinglugar de where. Probablemente no apreciará mi preocupación abstracta a favor de alguna otra preocupación, sino simplemente explicándola para que no crea que estoy totalmente loco.
nigromante
1
@necromante, gracias por poner una explicación detallada. Tiene mucho sentido ahora. ¡Gracias por una buena discusión!
bizi
3

Prueba esta consulta

select NUM, count(1) as count 
from tbl 
where num = 1
group by NUM
--having count(1) (You condition)

Violín SQL

Prahalad Gaggar
fuente
@randomstring Consulte el violín. :)
Prahalad Gaggar
gracias, pero no es necesario: ¡me gano mi reputación de la manera más difícil y, además, el sistema los detecta y los elimina de todos modos!
nigromante
1
SELECT sum(num) WHERE num = 1;
0xAli
fuente
No señor, afaik quiere la suma de los valores, no la ocurrencia del número.
0xAli
oye, tienes razón! amigo, hay una única respuesta correcta, ¡esta!
nigromante
1
@randomstring Es una consulta completamente incorrecta. 1.¿Y si OP quiere where num=2? 2Además, esta consulta volverá error, ya que no especifica el tablename.
Prahalad Gaggar
@Luv, estoy de acuerdo. esta pregunta es un desastre.
nigromante
@Luv, tiene razón, pero OP no dio un nombre de tabla en primer lugar, así que pretendí que esto fuera una pseudo consulta nada más.
0xAli
1

SELECT SUM(IF(your_column=3,1,0)) FROM your_table WHERE your_where_contion='something';

por ejemplo, para su consulta: -

SELECT SUM(IF(num=1,1,0)) FROM your_table_name;

usuario8567224
fuente
-2

Use esta consulta, esto le dará su salida:

select 
  t.name
  ,( select 
       count (*) as num_value 
     from Table 
      where num =t.num) cnt 
from Table t;
Rohit Sahu
fuente
Hola ! ¿Podría proporcionar el significado de "o / p"?
toshiro92
1
@ toshiro92 generalmente significa OutPut
Tomerikoo