计算多少行具有相同的值


78

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

例如,选择num = 1

结果:2

+-----+-----+
| NAME | NUM |
+=====+=====+
| SAM  |  1  | 
+-----+-----+
| BOB  |  1  |
+-----+-----+
| JAKE |  2  | 
+-----+-----+  
| JOHN |  4  | 
+-----+-----+

@randomstring请参考我的答案,也请拨弄小提琴
Prahalad Gaggar

@Luv,我赞成你的回答。由于模棱两可和简单,这个问题是一个簇#@ $ @。
死灵法师

是什么促使这么多重复的答案回答这样一个简单却不适当地的问题?感叹……一定要避免研究香肠的制作过程!
死灵法师

Answers:


127

尝试

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

SQL字段


4
如果有必要也通过特定的计数数字过滤掉,例如,获取的数字少于10或更多,则等于25,则可以使用HAVING运算符,例如GROUP BY ... HAVING COUNT(*) > ...
BotanMan

17

如果要获得以下所有值的结果NUM

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

或仅针对特定一种:

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

13

对于特定编号:

SELECT COUNT(1) FROM YOUR_TABLE WHERE NUM = 1

对于所有数字:

SELECT NUM, COUNT(1) FROM YOUR_TABLE GROUP BY NUM

10
SELECT 
   COUNT(NUM) as 'result' 
FROM 
   Table1 
GROUP BY 
   NUM 
HAVING NUM = 1

@necromancer请解释,为什么这里需要?在这种情况下使用它没有任何意义。如果他用它来比较汇总,那是值得的。
Nick N.

1
@NickN。having num = 1等同于where num = ,所以它没有错,也不是“没有道理”。我认为以这种方式而不是更常规的方式来进行更新是令人耳目一新的where。乍一看,等效性并不明显,所以我鼓励您自己尝试一下。
necromancer

@necromancer我还是看不到,因为where一样,为什么要使用having
Nick N.

5
@NickN。having用于组级别的标准;where适用于行级条件。它们通常不能互换。但是,在这种特殊的边界情况下,它们可以互换。因此输出是相同的。但是,从哲学上讲,我认为NUM这是组级别的标准,因为group by是在NUM其自身上完成的。因此我赞赏having而不是where。您可能不会喜欢我的抽象关注而支持其他关注,而只是解释一下,这样您就不会觉得我完全疯了。
necromancer

1
@necromancer,感谢您详细解释。现在这很有意义。感谢您的良好讨论!
bizi


1
SELECT sum(num) WHERE num = 1;

不是count
死灵法师

不,先生,我不想要他值的总和而不是数字出现的次数。
0xAli 2013年

嘿,你是对的!花花公子,有一个正确的答案,这个!
死灵法师

1
@randomstring这是完全不正确的查询。1.如果OP想要怎么办where num=22此外,此查询将返回error,因为它未指定tablename
Prahalad Gaggar

@Luv,我同意。这个问题一团糟。
死灵法师

1

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

例如为您查询:

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.