2013-11-20 36 views
4

我想对没有任何特定条件的数据进行分组,只是每个结果组的数据数量。我有这样一个表:在SQL查询中对具体的行数进行分组

DATE    VAL1  VAL2 
------------ ------ ------ 
01-01-2013   5   8 
01-02-2013   14  23 
01-03-2013   10   6 
01-04-2013   21  88 
01-05-2013   9  11 
01-06-2013   4   9 
01-07-2013   19  42 
01-08-2013   8   4 
01-09-2013   12   1 
01-10-2013   2   8 
01-11-2013   31  65 
01-12-2013   3   6 
... 

想那日期字段可能是,例如,一个数字,没有一个日期...

我要的是,例如,获得总额或数据组的平均值,其中组具有特定的行数(所有组的数量相同)。

例如,对于每个组,在这里我想获得VAL1的总和与VAL2的平均三行:

INTERVAL     SUM VAL 1 AVG VAL 2 
----------------------- --------- --------- 
01-01-2013 - 01-03-2013   29  12.3 
01-04-2013 - 01-06-2013   34  33.3 
01-07-2013 - 01-09-2013   39  15.6 
01-10-2013 - 01-12-2013   36  26.3 
... 

我真的认为这是可能的查询做的,但我可以” t找到方法来获得适当的“group by”句子。有人能帮助我吗?

非常感谢!在Oracle

回答

1

请尝试:

select 
    min("DATE")||' - '||max("DATE") "Interval", 
    sum(Val1) "SUM VAL 1", 
    cast(avg(Val2) as numeric(18,1)) "AVG VAL 2" 
from(
    select 
    "DATE", 
    ceil(extract(month from "DATE")/3) dt, 
    Val1, 
    Val2 
    from 
    YourTable 
)x 
group by dt 
order by dt 

SQL Fiddle Demo

3

您可以使用ROW_NUMBER函数除以3来分配唯一的号码给每个组连续的3行。然后,您可以汇总此组号码。

select min("DATE") ||'-'||max("DATE"), 
     sum(val1), 
     avg(val2) 
from (
     select "DATE", val1, val2, 
      ceil(row_number() over (order by "date")/3) as grp 
     from mytab 
    ) as x 
group by grp 
order by grp; 
相关问题