假设我们有如下表格,
id Col-1 Col-2
A 1 some text
B 0 some other text
C 3
...
以上面的表为例,我想构建一个输出结果的SQL语句:2,2。
第一个值是除0之外的所有col-1值的平均值,即(1 + 3)/ 2 = 2.(如果计算0,则结果将是(1 + 0 + 3)/ 3 = 1,这不是我想要的。)
第二个值是非空的所有col-2的总数。所以价值是2.
P.S,我知道如何单独创建它们。我更喜欢的是只创建一个语句来获得两个结果。
答案 0 :(得分:1)
对于第一个,您可以使用NULLIF
,因为在AVG
等聚合中会忽略空值。
对于第二个,我假设您只想计算值而不是NULL或空字符串。
SELECT AVG(NULLIF(Col1, 0)),
COUNT(CASE WHEN Col2 <> '' THEN 1 END)
FROM T
答案 1 :(得分:0)
您想要条件聚合:
select avg(case when col1 <> 0 then col1 end) as avg_not_zero,
count(col2) as num_not_empty
from table t;
作为注释:0
并不意味着该值为空。通常NULL
在SQL中用于此目的,但严格来说,NULL
表示未知值。
注意:如果&#34;空&#34;可能意味着空字符串而不是NULL
:
select avg(case when col1 <> 0 then col1 end) as avg_not_zero,
count(nullif(col2, '')) as num_not_empty
from table t;