tp2
This commit is contained in:
parent
65464f66c0
commit
24867f08a8
134
TD2/ecommerce_1.sql
Normal file
134
TD2/ecommerce_1.sql
Normal file
@ -0,0 +1,134 @@
|
||||
--1 Obtenir l’utilisateur ayant le prénom “Muriel” et le mot de passe “test11”, sachant que l’encodage du mot de passe est effectué avec l’algorithme Sha1.
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
clients C
|
||||
WHERE
|
||||
C.client_prenom = 'Muriel' AND C.client_password = SHA1('test11');
|
||||
;
|
||||
|
||||
--2 Obtenir la liste de tous les produits qui sont présents sur plusieurs commandes, avec, pour chaque produit, le nombre de fois où ils sont présents.
|
||||
SELECT
|
||||
CL.commande_ligne_nom,
|
||||
COUNT(*) as frequence
|
||||
FROM
|
||||
commandes_lignes CL
|
||||
GROUP BY
|
||||
CL.commande_ligne_nom
|
||||
HAVING
|
||||
COUNT(*) > 1
|
||||
ORDER BY
|
||||
frequence DESC
|
||||
;
|
||||
|
||||
|
||||
--3 Obtenir la liste de tous les produits qui sont présents sur plusieurs commandes et y ajouter une colonne qui liste les identifiants des commandes associées.
|
||||
SELECT
|
||||
C.commande_ligne_nom,
|
||||
GROUP_CONCAT(C.commande_id) AS les_commandes
|
||||
FROM
|
||||
commandes_lignes C
|
||||
WHERE
|
||||
C.commande_ligne_nom IN (
|
||||
SELECT
|
||||
CL.commande_ligne_nom
|
||||
FROM
|
||||
commandes_lignes CL
|
||||
GROUP BY
|
||||
CL.commande_ligne_nom
|
||||
HAVING
|
||||
COUNT(*) > 1
|
||||
)
|
||||
GROUP BY
|
||||
commande_ligne_nom
|
||||
;
|
||||
|
||||
|
||||
--4 Enregistrer le prix total à l’intérieur de chaque ligne des commandes, en fonction du prix unitaire et de la quantité.
|
||||
UPDATE
|
||||
commandes_lignes C
|
||||
SET
|
||||
ROUND(C.commande_ligne_prix_total,2) = C.commande_ligne_quantite * C.commande_ligne_prix_unitaire
|
||||
;
|
||||
|
||||
|
||||
--5 Obtenir le montant total pour chaque commande et y voir facilement la date associée à cette commande ainsi que le prénom et nom du client associé.
|
||||
SELECT
|
||||
C.commande_date_achat,
|
||||
CL.client_prenom,
|
||||
CL.client_nom,
|
||||
ROUND(SUM(CML.commande_ligne_prix_total),2) AS commande_total
|
||||
FROM
|
||||
commandes C
|
||||
JOIN
|
||||
clients CL ON C.client_id = CL.client_id
|
||||
JOIN
|
||||
commandes_lignes CML ON C.commande_id = CML.commande_id
|
||||
GROUP BY
|
||||
C.commande_id
|
||||
;
|
||||
|
||||
|
||||
--6 Enregistrer le montant total de chaque commande dans le champ intitulé “cache_prix_total”.
|
||||
UPDATE
|
||||
commandes C
|
||||
JOIN (
|
||||
SELECT
|
||||
commande_id,
|
||||
SUM(commande_ligne_prix_total) AS commande_total
|
||||
FROM
|
||||
commandes_lignes
|
||||
GROUP BY
|
||||
commande_id
|
||||
) CL
|
||||
ON
|
||||
C.commande_id = CL.commande_id
|
||||
SET
|
||||
C.commande_cache_prix_total = ROUND(CL.commande_total,2)
|
||||
;
|
||||
|
||||
|
||||
|
||||
--7 Obtenir le montant global de toutes les commandes, pour chaque mois.
|
||||
SELECT
|
||||
MONTH(C.commande_date_achat) AS mois,
|
||||
YEAR(C.commande_date_achat) AS annee,
|
||||
ROUND(SUM(C.commande_cache_prix_total),2) AS montant_global
|
||||
FROM
|
||||
commandes C
|
||||
GROUP BY
|
||||
annee,
|
||||
mois
|
||||
;
|
||||
|
||||
|
||||
|
||||
--8 Obtenir la liste des 10 clients qui ont effectué le plus grand montant de commandes, et obtenir ce montant total pour chaque client.
|
||||
SELECT
|
||||
CL.client_id,
|
||||
CL.client_prenom,
|
||||
CL.client_nom,
|
||||
ROUND(SUM(C.commande_cache_prix_total), 2) AS total_commandes
|
||||
FROM
|
||||
commandes C
|
||||
JOIN
|
||||
clients CL ON C.client_id = CL.client_id
|
||||
GROUP BY
|
||||
CL.client_id
|
||||
ORDER BY
|
||||
total_commandes DESC
|
||||
LIMIT
|
||||
10
|
||||
;
|
||||
|
||||
|
||||
|
||||
--9 Obtenir le montant total des commandes pour chaque date.
|
||||
SELECT
|
||||
DATE_FORMAT(C.commande_date_achat, "%d/%m/%Y") AS la_date,
|
||||
ROUND(SUM(C.commande_cache_prix_total),2) AS montant_journalier
|
||||
FROM
|
||||
commandes C
|
||||
GROUP BY
|
||||
la_date
|
||||
;
|
87
TD2/ecommerce_2.sql
Normal file
87
TD2/ecommerce_2.sql
Normal file
@ -0,0 +1,87 @@
|
||||
--1 Ajouter une colonne intitulée “categorie_id” à la table contenant les commandes. Cette colonne contiendra une valeur numérique.
|
||||
ALTER TABLE
|
||||
commandes
|
||||
ADD
|
||||
categorie_id INT(10) UNSIGNED DEFAULT NULL
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
--2 Enregistrer la valeur de la catégorie, en suivant les règles suivantes (en une seule requête) :
|
||||
UPDATE commandes
|
||||
SET categorie_id =
|
||||
CASE
|
||||
WHEN
|
||||
commande_cache_prix_total < 200
|
||||
THEN 1
|
||||
WHEN
|
||||
commande_cache_prix_total BETWEEN 200 AND 500
|
||||
THEN 2
|
||||
WHEN
|
||||
commande_cache_prix_total BETWEEN 500 AND 1000
|
||||
THEN 3
|
||||
ELSE 4
|
||||
END
|
||||
;
|
||||
|
||||
|
||||
|
||||
--3 Créer une table intitulée “categories” qui contiendra le descriptif de ces catégories.
|
||||
CREATE TABLE categories (
|
||||
categorie_id INT(10) UNSIGNED PRIMARY KEY,
|
||||
categorie_description VARCHAR(255)
|
||||
)
|
||||
;
|
||||
|
||||
INSERT INTO
|
||||
categories (
|
||||
categorie_id,
|
||||
categorie_description
|
||||
)
|
||||
VALUES
|
||||
(1, 'Moins de 200€'),
|
||||
(2, 'Entre 200€ et 500€'),
|
||||
(3, 'Entre 500€ et 1.000€'),
|
||||
(4, 'Supérieures à 1.000€')
|
||||
;
|
||||
|
||||
|
||||
--4 Créer la clé étrangère entre la table “categories” et la colonne “categorie_id” de la table “commandes”.
|
||||
SELECT
|
||||
FROM
|
||||
INNER JOIN
|
||||
ON
|
||||
WHERE
|
||||
GROUP BY
|
||||
ORDER BY
|
||||
LIMIT
|
||||
;
|
||||
|
||||
|
||||
|
||||
--5 Insérer les 4 descriptifs de chaque catégorie au sein de la table précédemment créée.
|
||||
SELECT
|
||||
FROM
|
||||
INNER JOIN
|
||||
ON
|
||||
WHERE
|
||||
GROUP BY
|
||||
ORDER BY
|
||||
LIMIT
|
||||
;
|
||||
|
||||
|
||||
|
||||
--6 Supprimer toutes les commandes (et les lignes des commandes) inférieures au 1er février 2019. Cela doit être effectué en 2 requêtes maximum.
|
||||
SELECT
|
||||
FROM
|
||||
INNER JOIN
|
||||
ON
|
||||
WHERE
|
||||
GROUP BY
|
||||
ORDER BY
|
||||
LIMIT
|
||||
;
|
||||
|
||||
|
@ -43,9 +43,7 @@ SELECT
|
||||
FROM
|
||||
villes V
|
||||
JOIN
|
||||
departements D
|
||||
ON
|
||||
V.departement_id = D.departement_id
|
||||
departements D ON V.departement_id = D.departement_id
|
||||
ORDER BY
|
||||
ville_population_2012 DESC
|
||||
LIMIT
|
||||
@ -62,9 +60,7 @@ SELECT
|
||||
FROM
|
||||
villes V
|
||||
JOIN
|
||||
departements D
|
||||
ON
|
||||
V.departement_id = D.departement_id
|
||||
departements D ON V.departement_id = D.departement_id
|
||||
GROUP BY
|
||||
D.departement_id
|
||||
ORDER BY
|
||||
@ -80,9 +76,7 @@ SELECT
|
||||
FROM
|
||||
villes V
|
||||
JOIN
|
||||
departements D
|
||||
ON
|
||||
V.departement_id = D.departement_id
|
||||
departements D ON V.departement_id = D.departement_id
|
||||
GROUP BY
|
||||
D.departement_id
|
||||
ORDER BY
|
||||
@ -144,9 +138,7 @@ SELECT
|
||||
FROM
|
||||
departements D
|
||||
JOIN
|
||||
villes V
|
||||
ON
|
||||
V.departement_id = D.departement_id
|
||||
villes V ON V.departement_id = D.departement_id
|
||||
GROUP BY
|
||||
D.departement_nom
|
||||
HAVING
|
||||
@ -166,15 +158,4 @@ LIKE
|
||||
'SAINT-%'
|
||||
ORDER BY
|
||||
V.ville_nom ASC
|
||||
;
|
||||
|
||||
|
||||
--template
|
||||
SELECT
|
||||
FROM
|
||||
INNER JOIN
|
||||
ON
|
||||
WHERE
|
||||
GROUP BY
|
||||
ORDER BY
|
||||
LIMIT
|
||||
;
|
Loading…
x
Reference in New Issue
Block a user