首页 > 解决方案 > 当我将搜索条件放入 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 倍。

标签: sqlaggregate-functions

解决方案


据推测,您正在使用 MySQL,因为那里允许使用这种语法。

该表达式(weight >= 300)是一个布尔表达式,其计算结果为0(for false) 或1(for true) 。. . 或者可以想象NULL如果weightNULL

该表达式COUNT(weight >= 300)计算非NULL值的数量。好吧,“真”和“假”都不是NULL,所以都算了。

要计算值,请使用SUM()

SUM(weight >= 300)

推荐阅读