是否可以在Count()中指定一个条件?我希望只计算在Position列中有“Manager”的行。
我想在count语句中做,而不是用WHERE;我正在询问它,因为我需要在相同的SELECT(类似count (Position = Manager), count (Position = Other))中计算经理和其他,所以在这个例子中,WHERE对我来说没有用处。
是否可以在Count()中指定一个条件?我希望只计算在Position列中有“Manager”的行。
我想在count语句中做,而不是用WHERE;我正在询问它,因为我需要在相同的SELECT(类似count (Position = Manager), count (Position = Other))中计算经理和其他,所以在这个例子中,WHERE对我来说没有用处。
当前回答
如果使用Postgres或SQLite,可以使用Filter子句来提高可读性:
SELECT
COUNT(1) FILTER (WHERE POSITION = 'Manager') AS ManagerCount,
COUNT(1) FILTER (WHERE POSITION = 'Other') AS OtherCount
FROM ...
BigQuery也有Countif -在这里可以看到不同SQL方言对这些特性的支持: https://modern-sql.com/feature/filter
其他回答
SELECT COUNT(*) FROM bla WHERE Position = 'Manager'
在MySQL中,布尔表达式的计算结果为0或1,因此下面的聚合工作:
select sum(Position = 'Manager') as ManagerCount
from ...
如果你不能用where子句限制查询本身,你可以使用count聚合只计算非空值的事实:
select count(case Position when 'Manager' then 1 else null end)
from ...
你也可以用类似的方式使用sum聚合:
select sum(case Position when 'Manager' then 1 else 0 end)
from ...
以下是我所做的,以获得一个数据集,其中包括每个集装箱内满足标准的总数和数量。让我来回答这个问题"有多少集装箱的货物超过X%大于51号"
select
Schedule,
PackageNum,
COUNT (UniqueID) as Total,
SUM (
case
when
Size > 51
then
1
else
0
end
) as NumOverSize
from
Inventory
where
customer like '%PEPSI%'
group by
Schedule, PackageNum
如果使用Postgres或SQLite,可以使用Filter子句来提高可读性:
SELECT
COUNT(1) FILTER (WHERE POSITION = 'Manager') AS ManagerCount,
COUNT(1) FILTER (WHERE POSITION = 'Other') AS OtherCount
FROM ...
BigQuery也有Countif -在这里可以看到不同SQL方言对这些特性的支持: https://modern-sql.com/feature/filter