我使用下面的查询对行进行计数,我想知道当我在查询中使用sum()时,它返回correct,但当我使用count return false时。我完成了这项工作,但我需要这个进一步发展自己的澄清
SELECT SUM(CASE
WHEN g.branchid=30 THEN 1
ELSE 0
END) AS count FROM `liverates` l LEFT JOIN branch b ON b.warehouseid=l.warehouseid LEFT JOIN `group` g ON l.warehouseid=g.warehouseid
SELECT COUNT(CASE
WHEN g.branchid=30 THEN 1
ELSE 0
END) AS count FROM `liverates` l LEFT JOIN branch b ON b.warehouseid=l.warehouseid LEFT JOIN `group` g ON l.warehouseid=g.warehouseid
上面的sum()返回215个正确的结果,然后count()不返回实际结果它返回了表的总计数
2条答案
按热度按时间tgabmvqs1#
count()
统计所有非空值,无论它们是什么。所以呢0
也算在内。这对我很有用
count()
```COUNT(CASE WHEN g.branchid=30
THEN 1
ELSE NULL
END)
COUNT(CASE WHEN g.branchid=30
THEN 1
END)
SUM(g.branchid=30)
3zwjbxry2#
COUNT()
将计算它遇到的行数,因此即使您的case
,它仍然是一行,因此将被计数。如果你只是想知道
g.branchid=30
然后把它变成一个WHERE
条款。。。这将忽略它不感兴趣的行,并可能使用索引。您还可以删除到分支表的链接,因为这看起来与本例无关。。。