4

次のような単純化された表がありxxます。

rdate  date
rtime  time
rid    integer
rsub   integer
rval   integer
primary key on (rdate,rtime,rid,rsub)

そして、値の合計(すべてのIDにわたる)の平均(すべての時間にわたる)を取得したいと考えています。

サンプル テーブルとして、次のようなものがあります (読みやすくするために、連続した同一の値は空白にしています)。

rdate       rtime     rid  rsub  rval
-------------------------------------
2010-01-01  00.00.00    1     1    10
                              2    20
                        2     1    30
                              2    40
            01.00.00    1     1    50
                              2    60
                        2     1    70
                              2    80
            02.00.00    1     1    90
                              2   100
2010-01-02  00.00.00    1     1   999

私が望む金額を得ることができます:

select rdate,rtime,rid, sum(rval) as rsum
from xx
where rdate = '2010-01-01'
group by rdate,rtime,rid

それは私に与える:

rdate       rtime     rid  rsum
-------------------------------
2010-01-01  00.00.00    1    30  (10+20)
                        2    70  (30+40)
            01.00.00    1   110  (50+60)
                        2   150  (70+80)
            02.00.00    1   190  (90+100)

予想通り。

今私が欲しいのは、時間ディメンション全体でこれらの値を平均するクエリであり、次のようになります。

rdate       rtime    ravgsum
----------------------------
2010-01-01  00.00.00      50  ((30+70)/2)
            01.00.00     130  ((110+150)/2)
            02.00.00     190  ((190)/1)

DB2 for z/OS を使用していますが、可能であれば標準 SQL を使用したいと考えています。

4

2 に答える 2

4
select rdate,rtime,avg(rsum) as ravgsum from (
    select rdate,rtime,rid, sum(rval) as rsum
    from xx
    where rdate = '2010-01-01'
    group by rdate,rtime,rid
) as subq
group by rdate,rtime
于 2010-06-10T03:34:11.040 に答える
1

どうですか

select rdate,rtime, sum(rsum) / count(rsum) as sumavg
from
(select rdate, rtime, rid, sum(rval) as rsum
from xx
where rdate = '2010-01-01'
group by rdate,rtime,rid) as subq
group by rdate,rtime
于 2010-06-10T03:35:16.377 に答える