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 :
la première calculera la moyenne des ventes hors samedi ;
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