Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL COUNT()还是SUM()?_Mysql_Count_Sum - Fatal编程技术网

MySQL COUNT()还是SUM()?

MySQL COUNT()还是SUM()?,mysql,count,sum,Mysql,Count,Sum,我对使用计数和总和有疑问。在这里,我通过这个查询得到了我想要的,为什么在指南中说使用COUNT而不是SUM +----+------------+-------+------+ | id | dateinsert | name | stat | +----+------------+-------+------+ | 1 | 2019-12-01 | john | 17 | | 2 | 2019-12-01 | peter | 19 | | 3 | 2019-12-01 | j

我对使用计数和总和有疑问。在这里,我通过这个查询得到了我想要的,为什么在指南中说使用COUNT而不是SUM

+----+------------+-------+------+
| id | dateinsert | name  | stat |
+----+------------+-------+------+
|  1 | 2019-12-01 | john  |   17 |
|  2 | 2019-12-01 | peter |   19 |
|  3 | 2019-12-01 | jane  |   17 |
|  4 | 2019-12-02 | phil  |   19 |
|  5 | 2019-12-02 | jane  |   17 |
|  6 | 2019-12-02 | phil  |   19 |
+----+------------+-------+------+


SELECT
SUM(stat=17)+SUM(stat=19) AS first_status,
FROM my_table
WHERE dateinsert >= '2019-12-01 00:00:00'
GROUP BY datainsert


+------------+--------------+
| datainsert | first_status |
+------------+--------------+
| 01/12/2019 |            3 |
| 02/12/2019 |            3 |
+------------+--------------+
当您说
SUM(stat=17)
时,服务器将逐行查看每个
stat
列,并将其与值
17
进行比较。只要在比较中比较的两个值都不是
NULL
,结果将是
1
(真)或
0
(假)。例如,
1>3
的计算结果为
0

所以,
SUM(stat=17)
将一组1和0相加。1来自列
stat
的值为17的行,0来自所有其他行。最后只计算
stat
列中有17行的行数。但与以下情况相比,这是一种非常间接的方法:

SELECT
dateinsert, COUNT(*) as first_status
FROM my_table
WHERE dateinsert >= '2019-12-01 00:00:00' and stat IN(17, 19)
GROUP BY datainsert 

1,0,1,0,1的计数是5。1,0,1,0,1的和是3。@cloude
count()
将计算行数,而
sum()
将添加值您的SQL有语法问题。@Booboo哪里有问题?在
第一个状态之后有一个逗号(
)。您还应该
选择dateinsert
,以便显示该列。因此,您显示的内容与实际SQL不匹配。在查询中,您使用了where,但我需要对其他字段求和,例如SUM(stat=17)+SUM(stat=19)作为第一个_状态,SUM(stat=51)+SUM(stat=77)作为第二个_状态。。。等等…对不起,你完全正确,我的例子不准确