在MySQL中,使用SUM或COUNT有什么区别?
SELECT SUM(USER_NAME = 'JoeBlow') SELECT COUNT(USER_NAME = 'JoeBlow')
uhry853o1#
要更直接、更直白地回答OP问题,请考虑是否对列中的整数而不是字符串进行求和。
+----+------+ | id | vote | +----+------+ | 1 | 1 | | 2 | -1 | | 3 | 1 | | 4 | -1 | | 5 | 1 | +----+------+
计数=5票
总和=1票
SUM是进行数学求和,而COUNT只是将任何值算作1,而不管数据类型是什么。
lzfw57am2#
第一个查询返回条件为真的次数,因为true为1,false为0。
true
1
false
0
第二个查询返回完整的记录计数,因为count()不关心其中的内容,只要内容不为空。因为count(1)和count(0)仍然是值,并且都被计算在内。
count()
count(1)
count(0)
要获得第二个查询的正确返回值,您必须使条件的结果null(而不是0)不被计入。就像这样:
null
SELECT COUNT(case when USER_NAME = 'JoeBlow' then 'no matter what' else NULL end) from your_table
或者只需从case语句中删除else部分,该语句会自动将else部分变为null。
case
else
toiithl63#
我猜count()返回一列中的行数,而sum()返回该列的总和
8yparm6h4#
select count(field) from table
比
select sum(1) from table
考虑使用第二个选项
4条答案
按热度按时间uhry853o1#
要更直接、更直白地回答OP问题,请考虑是否对列中的整数而不是字符串进行求和。
计数=5票
总和=1票
SUM是进行数学求和,而COUNT只是将任何值算作1,而不管数据类型是什么。
lzfw57am2#
结果不一样,差别很大。
第一个查询返回条件为真的次数,因为
true
为1
,false
为0
。第二个查询返回完整的记录计数,因为
count()
不关心其中的内容,只要内容不为空。因为count(1)
和count(0)
仍然是值,并且都被计算在内。要获得第二个查询的正确返回值,您必须使条件的结果
null
(而不是0
)不被计入。就像这样:或者只需从
case
语句中删除else
部分,该语句会自动将else
部分变为null
。toiithl63#
我猜count()返回一列中的行数,而sum()返回该列的总和
8yparm6h4#
比
考虑使用第二个选项