【发布时间】:2013-10-14 12:02:30
【问题描述】:
在 SQL 中,有一种表达方式可以计算有多少值与 'x' 不同:
SELECT COUNT(NULLIF(col, 'x')) FROM table
我发现计算等于 'x' 的值不太优雅:
SELECT COUNT(*) - COUNT(NULLIF(col, 'x')) FROM tableSELECT SUM(CASE WHEN col = 'x' THEN 1 ELSE 0 END) FROM table-
[oracle]
SELECT COUNT(DECODE(col,'x','x',NULL)) FROM table
有没有更优雅的方式来做到这一点?
【问题讨论】:
-
为什么不
select count(*) from table where col = 'x'? -
@Roman:你说得对,这个问题似乎很愚蠢。但在这里,我需要在单个查询中执行多个计数:
select count_if(col, 'x'), count_if(col, 'y'), count_if(col, 'z') FROM table -
@Roman
select count(*) from table where col <> 'x'不计算 col 为空的行。 -
@KlasLindbäck 它很容易调整,可能是 OP 不需要计算空值。无论如何,OP说他想做不止一个查询,我认为最易读的查询是使用
sum(case ... ) -
使用
in运算符过滤结果集where col in ('x','y','z')。然后你可以使用count聚合函数结合case表达式来计算每个值的个数,或者pivot运算符。
标签: sql oracle count aggregate-functions