--CAS : PAC
--Programmeur : AZAANOUNE Rayan
--Date : mardi 03 février 2026
--Objectif : Fonctions d'agrégation et requêtes imbriquées
-- Partie 1 : Fonctions d'agrégation
-- Ecrire les requêtes qui renvoient :
-- 1. Le nombre d'achats stockés dans la base
SELECT COUNT(*) AS "Nombre achats"
FROM ACHAT ;
-- 2. Le nombre de clients différents ayant fait des achats
SELECT COUNT(distinct NCLI) as "Nombre clients ayan fait"
FROM ACHAT ;
-- 3. Le nombre de produits achetés par le client 101
SELECT COUNT(np) as "NB Achetés"
FROM ACHAT
WHERE ncli = 101;
-- 4. La quantité moyenne de produits achetés par le client 101
SELECT AVG(np) as "MOY PROD ACHETE"
FROM ACHAT
WHERE ncli = 101;
-- 5. La plus petite quantité de produit achetée par le client 101
SELECT MIN(qa) as "PLUS PTITE QA"
FROM ACHAT
WHERE ncli = 101;
-- 6. La quantité totale de produits achetés par le client 10
SELECT SUM(qa) as "QA TOTALE"
FROM ACHAT
WHERE ncli = 101;
-- Partie 2 : Tri des tuple
-- Ecrire les requêtes qui renvoient :
-- 7. La liste des noms des clients triés par ordre alphabétique
SELECT nom as "LISTE NOM CLIENT"
FROM CLIENT
ORDER BY nom;
-- 8. Les produits classés par couleur et pour chaque couleur classés par quantité en stock décroissante
SELECT *
FROM PRODUIT
ORDER BY coul, qs desc;
-- 9. Les clients dont le nom commence par R, classés par ordre alphabétique
SELECT *
FROM CLIENT
WHERE nom like 'R%'
ORDER BY nom;
-- Partie 3 : Requêtes imbriquées
-- Ecrire les requêtes qui renvoient :
-- 10.1 Les identifiants des produits achetés par les clients parisiens
SELECT DISTINCT(ACHAT.np)
FROM CLIENT
INNER JOIN
ACHAT ON CLIENT.ncli = ACHAT.ncli
WHERE CLIENT.ville = 'PARIS';
-- 10.2 Les identifiants des produits achetés par les clients parisiens
SELECT DISTINCT(ACHAT.np)
FROM ACHAT
WHERE ACHAT.ncli in (SELECT ncli
FROM CLIENT
WHERE CLIENT.ville = 'PARIS');
-- 11. Les noms des clients qui habitent dans la même ville que Mr. Defrere
SELECT nom
FROM CLIENT
WHERE ville = (SELECT ville
FROM CLIENT
WHERE CLIENT.nom = 'DEFRERE');
-- 12.1 nom des clients ayant acheté au moins un des produits que Mr.Defrere a acheté
SELECT nom
FROM CLIENT
WHERE ncli in (SELECT ncli
FROM ACHAT
WHERE np in (SELECT np
FROM achat
WHERE ncli in (SELECT ncli
FROM client
WHERE nom = 'DEFRERE')));
-- 12.2 nom des clients ayant acheté au moins un des produits que Mr.Defrere a acheté
SELECT distinct(CLIENT1.nom)
FROM CLIENT AS CLIENT1
inner join
ACHAT AS ACHAT1 on CLIENT1.ncli = ACHAT1.ncli
inner join
ACHAT AS ACHAT2 on ACHAT1.np = ACHAT2.np
inner join
CLIENT AS CLIENT2 on ACHAT2.ncli = CLIENT2.ncli
WHERE CLIENT2.nom = 'DEFRERE';