sql - 当我将搜索条件放入 COUNT() 而不是 WHERE 子句时会发生什么?
问题描述
我正在尝试返回这些地区体重超过 300 磅的玩家人数。我知道将条件放在 COUNT() 而不是 WHERE 子句中是行不通的,但我不太清楚为什么。
我已经知道解决方案是只做这个 COUNT(1),然后用WHERE weight >= 300
. 我只是不确定为什么我写的内容没有返回相同的结果。
SELECT CASE WHEN state IN ('CA','OR','WA') THEN 'West Coast'
WHEN state = 'TX' THEN 'Texas'
ELSE 'Other' END AS regional,
COUNT(weight >= 300) AS heavyweights
FROM benn.college_football_players
GROUP BY 1;
实际结果应该是“其他”的 1590、德克萨斯州的 208 和西海岸的 186。相反,我得到的数字是 COUNT 结果的近 20 倍。
解决方案
据推测,您正在使用 MySQL,因为那里允许使用这种语法。
该表达式(weight >= 300)
是一个布尔表达式,其计算结果为0
(for false) 或1
(for true) 。. . 或者可以想象NULL
如果weight
是NULL
。
该表达式COUNT(weight >= 300)
计算非NULL
值的数量。好吧,“真”和“假”都不是NULL
,所以都算了。
要计算值,请使用SUM()
:
SUM(weight >= 300)