J'ai un tableau simplifié xx
comme suit:Comment obtenez-vous la moyenne des sommes dans SQL (agrégation multi-niveau)?
rdate date
rtime time
rid integer
rsub integer
rval integer
primary key on (rdate,rtime,rid,rsub)
et je veux obtenir la moyenne (dans tous les temps) des sommes (dans tous les IDs) des valeurs.
A titre d'exemple de table, j'ai (avec des valeurs identiques consécutives obturées pour la lisibilité):
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
je peux obtenir les sommes que je veux avec:
select rdate,rtime,rid, sum(rval) as rsum
from xx
where rdate = '2010-01-01'
group by rdate,rtime,rid
qui me donne :
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)
comme prévu.
Maintenant ce que je veux est la requête qui sera en moyenne également ces valeurs dans la dimension temporelle, me donner:
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)
J'utilise DB2 pour z/OS, mais je préfère la norme SQL si possible .
Je ne reçois pas de lignes retournées de cela, et j'étais sur le point de se plaindre amèrement quand je remarqué que vous aviez mis en '2010-06-01' pour une raison au lieu de 2010-01-01. Et puis j'ai remarqué que j'avais fait la même chose dans la question :-) D'Oh! Une fois que j'ai résolu cela (dans la question et toutes les réponses à ce jour), cela a bien fonctionné. – paxdiablo
Haha, heureuses choses ont fonctionné à la fin. :) – Amber