表示例:
time a b c
-------------
12:00 1 0 1
12:00 2 3 1
13:00 3 2 1
13:00 3 3 3
14:00 1 1 1
如何从按时间分组的行AVG(a)
和WHERE b!=0
获取AVG(c)
。是否可以仅使用sql
来解决?我的意思是查询不应该计算第一行来获取AVG(a)
,但不能计算AVG(c)
。
答案 0 :(得分:2)
您可以使用CASE
语句来获取条件聚合:
SELECT AVG(CASE WHEN b != 0 THEN a END)
,AVG(c)
FROM YourTable
GROUP BY time
演示:SQL Fiddle
这是有效的,因为WHEN
语句中CASE
条件未捕获的值将默认为NULL
,并且聚合函数会忽略NULL
值。
答案 1 :(得分:0)
SELECT AVG(a), AVG(c) from table WHERE b != 0
group by time
是啊......这就是你需要的吗?
答案 2 :(得分:0)
您可能想尝试类似
的内容SELECT T.tTIME
, AVG(CASE WHEN T.B != 0 THEN T.A END)
, AVG(T.C)
FROM @T T
GROUP BY T.tTIME
输出如下:
tTIME (No column name) (No column name)
12:00:00.0000000 2 1
13:00:00.0000000 3 2
14:00:00.0000000 1 1