From 655004045a6482fdef75c8551f70cd85caa7241c Mon Sep 17 00:00:00 2001 From: medina5 Date: Sat, 30 Aug 2025 10:27:33 +0200 Subject: [PATCH] Questions --- Exercices.md | 20 +++++++ Home.md | 32 ++++++++++ Réponses/{aggregation.sql => 1-10.sql} | 83 +++++++++++++++++--------- exercice.md | 41 ------------- 4 files changed, 107 insertions(+), 69 deletions(-) create mode 100644 Exercices.md rename Réponses/{aggregation.sql => 1-10.sql} (68%) delete mode 100644 exercice.md diff --git a/Exercices.md b/Exercices.md new file mode 100644 index 0000000..9086a3f --- /dev/null +++ b/Exercices.md @@ -0,0 +1,20 @@ +# Exercices + + +## 2. Jointures + + +- 2a : Quel est l'article qui n'a jamais été commandé ? +- 2b : Quels sont les articles qui apparaissent qu'une seule fois +- 3 : Lister les articles dont la famille est absente + +- 1 : Lister tous les tickets avec le nom du client. Afficher uniquement les tickets qui ont un client existant. +- 2 : Lister tous les clients et le nombre de tickets associés, même les clients qui n’ont pas encore de ticket doivent apparaître (avec 0). +- 3 : Lister tous les tickets, avec le nom du client s’il existe. Si un ticket a perdu sa référence client (valeur orpheline), il doit tout de même apparaître. +- 4 : Lister tous les clients et tous les tickets, même si la correspondance n’existe pas. Union des clients sans tickets et des tickets sans clients. +- 5 : Lister uniquement les clients qui ont acheté au moins un produit. + +- 7 : Lister les produits avec leur famille, même si certains produits n’ont pas de famille renseignée. +- 8 : Lister tous les couples de clients qui habitent dans la même ville. +- 9 : Lister toutes les combinaisons possibles de familles et de clients (sans condition de jointure). +- 10 : Lister les tickets contenant au moins un produit de la famille "Boissons". diff --git a/Home.md b/Home.md index f9aff51..eda4807 100644 --- a/Home.md +++ b/Home.md @@ -5,3 +5,35 @@ - [Sous requêtes](sousrequete.md) - [Arbres](Arbres.md) - [Fonctions de fenêtrage](window.md) + +## Exercices + +Arrondir les montant à deux chiffres après la virgule. + +- 1a : Quel est le nombre total de ticket ? (101 616) +- 1b : Quel est le nombre total d'adhérents ? (2439) +- 1c : Quel est le nombre total d'articles ? (1099) +- 1d : Quel est le nombre total de familles ? (159) +- 2 : Calculer le chiffre d’affaires global. (1 914 792.40) +- 3a : Pour chaque adhérent unique, afficher son nom et son nombre de ticket. +- 3b : Quel est le détail du nombre de ticket pour ceux dont le nom de famille est Lavergne ? (11 et 2) +- 3c : Quels sont les personnes qui ont exactement 72 tickets ? (Cote et Lebreton) +- 4 : Afficher l'article le plus cher et l'article le moins cher (avec leur prix). (Pistache 63 et Courgette Mini Fleur 0.3) +- 5a : Calculer le montant moyen d’un ticket. (18.84) +- 5b : Calculer le nombre moyen d'article distinct d'un ticket. (6.69) +- 5c : Calculer le nombre moyen d'article d'un ticket. Les articles facturés au poids comptent pour 1. (7.22) +- 6a : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés. +- 6b : Quel est le nombre d'article de la famille 02CHOU. (29) +- 7a : Afficher, pour chaque mois, le chiffre d’affaires réalisé. +- 7b : Quel est le chiffre d'affaire du mois d'avril 2016. (20042.39) +- 8 : Trouver les 3 adhérents qui ont dépensé le plus en montant total. (Collot, Gérard, Blandin) +- 9a : Afficher l'article facturé au poids ayant généré le plus de ventes en quantité totale vendue. (Pomme) +- 9b : Afficher l'article facturé à l'unité ayant généré le plus de ventes en quantité totale vendue. (Oeufs Boite 6) +- 10a : Pour chaque famille, afficher le montant total des ventes. +- 10b : Quel est le montant total des ventes de la famille 03FRAISE. (10368.69) + +- 11a : Combien d'adhérents n’ont jamais acheté d'article ? +- 11b : Combien d'adhérents n’ont aucun ticket ? +- 11c : Combien de tickets sont vides (sans ligne) + +- 20 : Quel adhérent est en double (même nom, prénom, date de naissance) diff --git a/Réponses/aggregation.sql b/Réponses/1-10.sql similarity index 68% rename from Réponses/aggregation.sql rename to Réponses/1-10.sql index bf0b83b..5fa7d83 100644 --- a/Réponses/aggregation.sql +++ b/Réponses/1-10.sql @@ -1,16 +1,24 @@ --- Réponses +-- Réponses questions de 1 à 10 --- 1a : Quel est le nombre total de ticket ? --- 101 616 +-- 1a : 101 616 select count(*) as nb_ticket from ticket; --- 1b : Quel est le nombre total d'adhérents ? --- 2439 +-- 1b : 2439 select count(*) as nb_adherent from adherent; --- 2 : Calculer le chiffre d’affaires global. --- 1 914 792.39585 -select sum(quantite * prix_unitaire) as chiffre_affaire from ligne; +-- 1c : 1099 +select count(*) as nb_articles from article; + +-- 1d : 159 +select count(*) as nb_familles from famille; + +-- ------------------------------------------------------------ + +-- 2 : 1 914 792.40 +select round(sum(quantite * prix_unitaire), 2) as chiffre_affaire from ligne; + +-- 2: 1 915 049.36 +select sum(round(quantite * prix_unitaire, 2)) as chiffre_affaire from ligne; -- 3a : Pour chaque adhérent unique, afficher son nom et son nombre de ticket. select a.nom, @@ -27,7 +35,7 @@ join ticket t on a.id = t.adherent_id where a.nom = 'Lavergne' group by a.id; --- 3c : Quels sont les personnes qu iont exactement 72 tickets ? +-- 3c : Quels sont les personnes quiont exactement 72 tickets ? select a.nom, a.prenom, count(t.id) as nb_ticket from adherent a @@ -35,7 +43,22 @@ join ticket t on a.id = t.adherent_id group by a.id having count(t.id) = 72; --- 4a : Calculer le montant moyen d’un ticket. +-- 4 : Afficher le produit le plus cher et le produit le moins cher (avec leur prix). +-- Pistache 63 +select article.article, prix +from article +order by prix desc +limit 1; + +-- Courgette Mini Fleur 0.3 +select article.article, prix +from article +order by prix asc +limit 1; + +-- ------------------------------------------------------------ + +-- 5a : Calculer le montant moyen d’un ticket. -- 18.84 select avg(total_ticket) as panier_moyen from ( @@ -45,7 +68,7 @@ from ( group by t.id ) sous_requete; --- 4b : Calculer le nombre moyen d'article distinct d'un ticket. +-- 5b : Calculer le nombre moyen d'article distinct d'un ticket. -- 6.69 SELECT avg(nb_articles_distincts) AS moyenne_articles_distincts FROM ( @@ -55,7 +78,7 @@ FROM ( GROUP BY t.id ) sub; --- 4c Calculer le nombre moyen d'article d'un ticket. Les articles facturés au poids comptent pour 1. +-- 5c Calculer le nombre moyen d'article d'un ticket. Les articles facturés au poids comptent pour 1. -- 7.21 SELECT AVG(nb_articles) AS moyenne_articles_par_ticket FROM ( @@ -72,19 +95,7 @@ FROM ( GROUP BY t.id ) sub; - --- 5 : Afficher le produit le plus cher et le produit le moins cher (avec leur prix). --- Pistache 63 -select article.article, prix -from article -order by prix desc -limit 1; - --- Courgette Mini Fleur -select article.article, prix -from article -order by prix asc -limit 10; +-- ------------------------------------------------------------ -- 6a : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés. select f.famille, count(a.code) as nb_produits @@ -108,6 +119,13 @@ join ligne l on t.id = l.ticket_id group by date_trunc('month', t.date_ticket) order by mois; +-- 7b +select + sum(l.quantite * l.prix_unitaire) as montant_mensuel +from ticket t +join ligne l on t.id = l.ticket_id +where date_trunc('month', t.date_ticket) = '2016-04-01'; + -- 8 : Trouver les 3 adhérents qui ont dépensé le plus en montant total. select a.nom, sum(l.quantite * l.prix_unitaire) as total_depense from adherent a @@ -117,7 +135,16 @@ group by a.nom order by total_depense desc limit 3; --- 9 : Afficher l'article ayant généré le plus de ventes en quantité totale vendue. +-- 9a : Afficher l'article ayant généré le plus de ventes en quantité totale vendue. +select a.article, sum(l.quantite) as total_vendu +from article a +join ligne l on a.code = l.article_code +where a.factpoids = true +group by a.article +order by total_vendu desc +limit 1 + +-- 9b : Afficher l'article ayant généré le plus de ventes en quantité totale vendue. select a.article, sum(l.quantite) as total_vendu from article a join ligne l on a.code = l.article_code @@ -127,10 +154,10 @@ order by total_vendu desc limit 1 -- 10 : Pour chaque famille, afficher le montant total des ventes. -select f.famille, +select f.code, sum(l.quantite * l.prix_unitaire) as total_famille from famille f join article a on f.code = a.famille_code join ligne l on a.code = l.article_code -group by f.famille +group by f.code order by total_famille desc; diff --git a/exercice.md b/exercice.md deleted file mode 100644 index acdd18a..0000000 --- a/exercice.md +++ /dev/null @@ -1,41 +0,0 @@ -# Exercices - -## 1. Fonctions d'agrégation - -- 1a : Quel est le nombre total de ticket ? -- 1b : Quel est le nombre total d'adhérents ? -- 2 : Calculer le chiffre d’affaires global. -- 3a : Pour chaque adhérent unique, afficher son nom et son nombre de ticket. -- 3b : Quel est le détail du nombre de ticket pour ceux dont le nom de famille est Lavergne ? -- 3c : Quels sont les personnes qu iont exactement 72 tickets ? -- 4a : Calculer le montant moyen d’un ticket. -- 4b : Calculer le nombre moyen d'article distinct d'un ticket. -- 4c : Calculer le nombre moyen d'article d'un ticket. Les articles facturés au poids comptent pour 1. -- 5 : Afficher l'article le plus cher et l'article le moins cher (avec leur prix). -- 6a : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés. -- 6b : Quel est le nombre d'article de la famille 02CHOU -- 7 : Afficher, pour chaque mois, le chiffre d’affaires réalisé. -- 8 : Trouver les 3 adhérents qui ont dépensé le plus en montant total. -- 9a : Afficher l'article facturé au poids ayant généré le plus de ventes en quantité totale vendue. -- 9b : Afficher l'article facturé à l'unité ayant généré le plus de ventes en quantité totale vendue. -- 10 : Pour chaque famille, afficher le montant total des ventes. - -## 2. Jointures - -- 1a : Combien d'adhérents n’ont jamais acheté d'article ? -- 1b : Combien d'adhérents n’ont aucun ticket ? -- 1c : Combien de tickets sont vides (sans ligne) -- 2a : Quel est l'article qui n'a jamais été commandé ? -- 2b : Quels sont les articles qui apparaissent qu'une seule fois -- 3 : Lister les articles dont la famille est absente - -- 1 : Lister tous les tickets avec le nom du client. Afficher uniquement les tickets qui ont un client existant. -- 2 : Lister tous les clients et le nombre de tickets associés, même les clients qui n’ont pas encore de ticket doivent apparaître (avec 0). -- 3 : Lister tous les tickets, avec le nom du client s’il existe. Si un ticket a perdu sa référence client (valeur orpheline), il doit tout de même apparaître. -- 4 : Lister tous les clients et tous les tickets, même si la correspondance n’existe pas. Union des clients sans tickets et des tickets sans clients. -- 5 : Lister uniquement les clients qui ont acheté au moins un produit. - -- 7 : Lister les produits avec leur famille, même si certains produits n’ont pas de famille renseignée. -- 8 : Lister tous les couples de clients qui habitent dans la même ville. -- 9 : Lister toutes les combinaisons possibles de familles et de clients (sans condition de jointure). -- 10 : Lister les tickets contenant au moins un produit de la famille "Boissons".