2023-01-19 09:11:42 +01:00

153 lines
3.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--1 Obtenir lutilisateur ayant le prénom “Muriel” et le mot de passe “test11”, sachant que lencodage du mot de passe est effectué avec lalgorithme 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 à linté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
;
---trigger 7
DELIMITER //
CREATE TRIGGER before_insert_commandes_lignes
BEFORE INSERT
ON commandes_lignes FOR EACH ROW
BEGIN
SET NEW.commande_ligne_prix_total = NEW.commande_ligne_quantite * NEW.commande_ligne_prix_unitaire;
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER before_update_commandes_lignes
BEFORE UPDATE
ON commandes_lignes FOR EACH ROW
BEGIN
SET NEW.commande_ligne_prix_total = NEW.commande_ligne_quantite * NEW.commande_ligne_prix_unitaire;
END //
DELIMITER ;