首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL COUNT()还是SUM()?

MySQL COUNT()还是SUM()?
EN

Stack Overflow用户
提问于 2019-12-05 19:33:06
回答 1查看 102关注 0票数 0

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

代码语言:javascript
复制
+----+------------+-------+------+
| 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 |
+------------+--------------+
EN

回答 1

Stack Overflow用户

发布于 2019-12-05 20:37:30

当您说SUM(stat=17)时,服务器将逐行查看每个stat列,并将其与值17进行比较。只要比较中比较的两个值都不是NULL,结果就会是1 (TRUE)或0 (FALSE)。例如,1 > 3的计算结果为0

因此,SUM(stat=17)将一堆1和0相加。1来自列stat的值为17的行,0来自所有其他行。这最终只计算了stat列中有17行的行数。但与以下方法相比,这是一种非常间接的方法来获得结果:

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59194232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档