SQL语句 - 在不同条件下使用avg和count

时间:2015-05-26 21:32:20

标签: sql sql-server

假设我们有如下表格,

 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,我知道如何单独创建它们。我更喜欢的是只创建一个语句来获得两个结果。

2 个答案:

答案 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;