计算有多少行具有相同的值

use*_*278 67 mysql sql

如何编写SQL查询以计算表的num列中特定num值的总数.

例如,选择num = 1的位置

结果:2

+-----+-----+
| NAME | NUM |
+=====+=====+
| SAM  |  1  | 
+-----+-----+
| BOB  |  1  |
+-----+-----+
| JAKE |  2  | 
+-----+-----+  
| JOHN |  4  | 
+-----+-----+
Run Code Online (Sandbox Code Playgroud)

Meh*_*zad 106

尝试

SELECT NAME, count(*) as NUM FROM tbl GROUP BY NAME
Run Code Online (Sandbox Code Playgroud)

SQL FIDDLE

  • 如果还需要通过特定的计数数字过滤掉,假设只得到小于 10 或大于 25,则可以使用 `HAVING` 运算符,例如 `GROUP BY ... HAVING COUNT(*) > ...` (5认同)

Sir*_*rko 15

如果您想获得以下所有值的结果NUM:

SELECT `NUM`, COUNT(*) AS `count` 
FROM yourTable
GROUP BY `NUM`
Run Code Online (Sandbox Code Playgroud)

或者仅针对一个特定的:

SELECT `NUM`, COUNT(*) AS `count` 
FROM yourTable
WHERE `NUM`=1
Run Code Online (Sandbox Code Playgroud)


Dhw*_*ani 13

对于特定数字:

SELECT COUNT(1) FROM YOUR_TABLE WHERE NUM = 1
Run Code Online (Sandbox Code Playgroud)

对于所有NUM:

SELECT NUM, COUNT(1) FROM YOUR_TABLE GROUP BY NUM
Run Code Online (Sandbox Code Playgroud)


Dev*_*hah 8

SELECT 
   COUNT(NUM) as 'result' 
FROM 
   Table1 
GROUP BY 
   NUM 
HAVING NUM = 1
Run Code Online (Sandbox Code Playgroud)

  • @NickN.`having`用于组级标准; `where`用于行级标准.它们一般不能互换.然而,在这种特殊的边界情况下,它们可以互换.因此输出是相同的.但是,哲学上我认为"NUM"是一个组级标准,因为group by是在"NUM"本身完成的.所以我很欣赏`有'而不是`where`.你可能不会欣赏我的抽象关注,支持其他一些问题,但只是解释它,所以你不认为我完全疯了. (5认同)
  • @尼克N。`having num = 1` 等价于 `where num = `,所以它没有错误,也不是“没有意义”。我认为这种方式与更传统的“where”相比是令人耳目一新的不同。乍一看,等效性并不明显,因此我鼓励您自己尝试一下。 (2认同)
  • @necromancer,感谢您提供详细解释。现在它很有意义。感谢您的良好讨论! (2认同)

Luv*_*Luv 6

尝试这个查询

select NUM, count(1) as count 
from tbl 
where num = 1
group by NUM
--having count(1) (You condition)
Run Code Online (Sandbox Code Playgroud)

SQL小提琴