我正在尝试计算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之间的任何数字
答案 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