使用SQL计算出一些但不是全部记录的平均值

时间:2015-03-13 17:36:06

标签: sql

我正在尝试计算SQL来平均一系列数字,但只包括那些大于0的数字。

例如:

Field
4
5
0
6

SELECT Avg(Field) FROM Table;

给出3.75。但我希望它忽略0,所以平均值是5.

SELECT Avg(Field) FROM Table where Field > 0;

有效,但如果我有超过1个字段,该怎么办:

Field1   Field2
4        2 
5        0
0        3
6        4

SELECT Avg(Field1), Avg(Field2) FROM Table;

使用

SELECT Avg(Field1), Avg(Field2) FROM Table where Field1 >0 and Field2>0;

不起作用

我该怎么做?请注意,数字可以是0到100之间的任何数字

5 个答案:

答案 0 :(得分:3)

只需使用where子句过滤掉0。

SELECT Avg(Field) FROM Table Where Field > 0

答案 1 :(得分:1)

您可以使用条件表达式:

SELECT 
  Avg(case when Field1 > 0 then Field1 end), 
  Avg(case when Field2 > 0 then Field2 end) 
FROM table

答案 2 :(得分:0)

SELECT Avg(Field) FROM yourtable where Field > 0    ;

答案 3 :(得分:0)

将0转换为null,如下所示:

SELECT AVG(IF(N=0,NULL,N)) FROM
(
SELECT 5 N
UNION ALL SELECT 4 
UNION ALL SELECT 0 
UNION ALL SELECT 2

) the_ns

答案 4 :(得分:0)

你必须假冒AVG():):):)

SELECT SUM(Field1)/SUM(IF(field1>0, 1, 0)), SUM(Field2)/SUM(IF(field2>0, 1, 0))

我假设查询中有GROUP BY