Je dois écrire une requête où pour chaque client et chaque mois de 2009, calculer l'achat moyen avant chaque mois, après chaque mois, et montre une liste avec les clients et les mois, où l'achat moyen après chaque mois est supérieur à l'achat moyen avant le mois.Aide à la construction d'une requête pour calvuler avg(), avant un mois, et après un mois
Exemple de ce qu'il doit montrer:
name month avgBefore avgAfter
P.Anderson 3 13 35
Mon problème est, alors qu'il est assez facile de créer la vue v1 qui contient (nom, code, mois, avgAmount) (une liste pour afficher le nom, avg achats pour chaque mois), je ne sais pas (ou plutôt je ne peux pas imaginer) comment faire le reste (calculer avg avant/après chaque mois).
Ex: mois avereagebefore 3 = somme (tous moyenne du mois 1 à 3), avereageAfter mois 3 = somme (tous moyenne de 3 à max (mois)
Quelqu'un peut-il s'il vous plaît me aider
? la vue V1 est comme ça (comme indiqué lorsque vous modifiez la vue dans Management studio)
SELECT
c.name, c.code,
MONTH(t.DateTime) AS minas,
AVG(t.charged_amount) AS total
FROM
dbo.customers AS c
INNER JOIN
dbo.accounts AS a ON c.code = a.customer_code
INNER JOIN
dbo.creditcard AS cc ON a.acc_number = cc.acc_number
INNER JOIN
dbo.transactions AS t ON cc.cc_number = t.cc_number
INNER JOIN
dbo.shop AS s ON t.shop_code = s.shop_code
WHERE
(YEAR(t.DateTime) = 2009)
GROUP BY
c.name, c.code, MONTH(t.DateTime)
J'ai essayé de séparer chaque mois dans une vue (comme créé 12 vues: S)
Ex:
create view [Dec](name, code, minas, averg)
as
select * from v1
where minas = 12
puis a fait ceci:
select
v1.name, v1.code, v1.minas, sum(total)
from
v1, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, [Dec]
where
v1.minas <= Jan.minas or v1.minas <= Feb.minas or
v1.minas <= Mar.minas or v1.minas <= Apr.minas or
v1.minas <= May.minas or v1.minas <= Jun.minas or
v1.minas <= Jul.minas or v1.minas <= Aug.minas or
v1.minas <= Sep.minas or v1.minas <= Oct.minas or
v1.minas <= Nov.minas or v1.minas <= [Dec].minas
group by
v1.name,v1.code,v1.minas
mais cela n'a pas fonctionné.
également pour un test que j'ai essayé:
select
v1.name, v1.code, v1.minas, sum(v1.total)
from
v1, Jan as v2, Feb as v3
where
v1.code = v2.code and v1.code = v3.code
group by
v1.name, v1.code, v1.minas
mais le résultat était
Nelson J. Arredondo 100606 1 75
Nelson J. Arredondo 100606 2 100
Nelson J. Arredondo 100606 5 250
au mois 2, il aurait dû être 175 et mois 5 250 + 175
peut vous s'il vous plaît aidez-moi à comprendre cela?
Je pense qu'avant de faire du SQL, vous clarifiez le plus le contexte statistique. moyenne avant le mois 3 = somme (toutes les moyennes du mois 1 à 3). 1) peut-être que vous venez de choisir un nom trompeur ici, je voudrais exclure le mois 3 et utiliser les mois 1 et 2 ici. 2) En utilisant seulement la somme des moyennes ne donne pas quelque chose de comparable, je devrais au moins diviser par 2. Et dans la pratique je voudrais juste utiliser juste le avarage dans la gamme avant. –
ci-dessus était juste un exemple sur ce que la requête doit retourner. Actuallu la vue V1, a avant chaque mois et chaque client, l'achat moyen. Aussi ce que j'ai essayé de faire ci-dessus, était de faire la somme de la moyenne de chaque client pour les mois précédents. disons que Nelson J. Arredondo avait en moyenne 75 achats pour janvier et 100 en février. Puis l'achat moyen avant février était de 75 et après février de 175. De même pour le mois de mai, l'achat moyen avant mat est de 75 + 100 = 175. et après mai est 75 + 100 + 250 = 375 – George