我想获得一些时间范围列表的某些列的平均值。时间范围不固定,因此不是每年或每月的平均值。
我不想针对每个范围对数据库进行查询,如果可能的话,我希望只进行一次此查询。
如果我们可以将2个时间范围的以下查询替换为仅一个查询,那将会很酷。
SELECT AVG(column1) FROM Table1 WHERE dateColumn > startRange1 && dateColumn < endRange1
SELECT AVG(column1) FROM Table1 WHERE dateColumn > startRange2 && dateColumn < endRange2
注意:时间范围列表可在1到12个指定范围之间变化。
答案 0 :(得分:3)
case based aggregation
是在单个查询中执行此操作的一种方法。
SELECT AVG(case when dateColumn > startRange1 && dateColumn < endRange1 then column1 end) as range1Avg,
AVG(case when dateColumn > startRange2 && dateColumn < endRange2 then column1 end) as range2Avg
FROM Table1