--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
;

---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 ;