MySQL COUNT()还是SUM()?
我对使用计数和总和有疑问。在这里,我通过这个查询得到了我想要的,为什么在指南中说使用COUNT而不是SUMMySQL 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
+----+------------+-------+------+
| 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)作为第二个_状态。。。等等…对不起,你完全正确,我的例子不准确