在MySQL中,使用SUM和COUNT有什么区别?
SELECT SUM(USER_NAME = 'JoeBlow')
SELECT COUNT(USER_NAME = 'JoeBlow')
为了更直接而字面地回答OP的问题,考虑一下您是否在列中求和整数而不是字符串。
+----+------+
| id | vote |
+----+------+
| 1 | 1 |
| 2 | -1 |
| 3 | 1 |
| 4 | -1 |
| 5 | 1 |
+----+------+
COUNT = 5票
SUM = 1票
(-2 + 3 = 1)
Sum执行数学求和,而count只是简单地计算任何值为1,不考虑数据类型。
第一个查询返回条件成立的次数,因为true
表示1
,而false
则表示0
。
第二个查询返回满足条件的完整记录数,因为count()
只关心括号内的内容是否为空,只要不为空都会计数。因此 count(1)
和 count(0)
都是有值,都被计入了结果。
要想使第二个查询得到正确的结果,需要让条件的返回值为null
(而非0
),这样才不会被计数。如下所示:
SELECT COUNT(case when USER_NAME = 'JoeBlow' then 'no matter what' else NULL end)
from your_table
或者简单地从case
语句中删除else
部分,这会自动将else
部分变为null
。
select count(field) from table
比...慢
select sum(1) from table
考虑使用第二个选项
COUNT
计数和SUM
求和的事实,除非你必须添加一些新的见解,否则没有必要重复提及。 - Nico Haase