我对count和sum的用法有疑问。这里我通过这个查询得到了我想要的,为什么在指南中说使用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 |
+------------+--------------+发布于 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行的行数。但与以下方法相比,这是一种非常间接的方法来获得结果:
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 https://stackoverflow.com/questions/59194232
复制相似问题