Cas Fantastic : Exploration avec l'agrégation

Question

Effectuez une requête de type GROUP BY pour étudier les ventes en fonction du jour de la semaine.

Solution

1
SELECT d.jds, COUNT(*) AS q
2
FROM f_dw_ventes v, f_dw_date d
3
WHERE v.dat=d.dat
4
GROUP BY d.jds
5
ORDER BY q desc;
1
JDS        Q
2
---------- -
3
saturday   187106 
4
tuesday    79424 
5
wednesday  76152 
6
thursday   75147 
7
friday     74284 
  • Conclusion : On vend plus le samedi

  • Conclusion : Les magasins sont tous fermés tous les dimanche et tous les lundi

  • Hypothèse : Tous les autres jours se comportent de la même façon, on considère à présent uniquement les jours "Samedi" et "Non-Samedi"

Question

Écrivez une requête avec sous-requête dans la clause FROM pour trouver la moyenne des ventes des jours hors samedi.

Solution

1
SELECT avg(q) FROM
2
(
3
SELECT d.jds AS jds, COUNT(*) AS q
4
FROM f_dw_ventes v, f_dw_date d
5
WHERE v.dat=d.dat
6
GROUP BY d.jds
7
ORDER BY q desc
8
)
9
WHERE jds <> 'saturday';
1
AVG(Q)
2
------
3
76251.75

Question

Transformez la première requête permettant de calculer les ventes en fonction du jour de la semaine en une vue.

Ajouter deux autres vues :

  1. la première calculera la moyenne des ventes hors samedi ;

  2. la seconde le ratio de ventes le samedi par rapport à la moyenne.

Solution

1
CREATE OR REPLACE VIEW f_dw_ventesParJds AS
2
SELECT d.jds, COUNT(*) AS q
3
FROM f_dw_ventes v, f_dw_date d
4
WHERE v.dat=d.dat
5
GROUP BY d.jds
6
ORDER BY q desc;
1
CREATE OR REPLACE VIEW f_dw_ventesMoyHS AS
2
SELECT avg(q) as m
3
FROM f_dw_ventesParJds
4
WHERE jds <> 'saturday';
1
CREATE OR REPLACE VIEW f_dw_ratioVentesSamedi AS
2
SELECT s.jds AS jds, ROUND(s.q/hs.m,2) as r
3
FROM f_dw_ventesparjds s, f_dw_ventesmoyhs hs
4
WHERE jds = 'saturday';
1
SELECT * FROM f_dw_ratioVentesSamedi;
1
JDS        R
2
---------- -
3
saturday   2.45