diff --git a/Home.md b/Home.md index 2685be7..924437e 100644 --- a/Home.md +++ b/Home.md @@ -17,12 +17,28 @@ - Afficher le nombre de codes postaux différents trouvés dans la table adhérent. [voir](aggregation.md#distinct) - Calculer le chiffre d'affaire global [voir](aggregation.md#somme) - Calculer le montant de chaque ticket +- Afficher l'article le plus cher (avec son prix). [voir](aggregation.md#maximum) ### Jointures - Lister les articles dont la famille n'existe pas [voir](Jointure.md#jointure-dexclusion). +- Lister les articles dont la famille est absente. [voir](Jointure.md#jointure-dexclusion). ### Vues - Créer une vue _ticket_complet_ qui agrège les informations du ticket et le calcul du montant total de ce ticket +- Créer une vue qui donne le chiffre d'affaires de chaque mois + +```sql +create or replace view ca_mensuel as +select date_trunc('month', date_ticket) as mois, + sum(montant) as total +from ticket_completz tc +group by mois --date_trunc('month', date_ticket) +``` + +### Sous requêtes +- Afficher pour chaque adhérent la date et le montant de son dernier ticket. [voir](sousrequete.md#laterals). + + Arrondir les montant à deux chiffres après la virgule. @@ -47,5 +63,5 @@ Arrondir les montant à deux chiffres après la virgule. - 11c : Combien de tickets sont vides (sans ligne). (12) - 12a : Quel est l'article qui n'a jamais été commandé ? (Chocolat Noir 80% Framboise Myrtilles) - 12b : Quels sont les articles qui apparaissent qu'une seule fois dans les lignes de ticket (Ananas séché 100g, ...) -- 13 : Lister les articles dont la famille est absente. (MENMA) + - 14 : Lister les tickets qui contiennent l’article le plus cher du catalogue. diff --git a/Jointure.md b/Jointure.md index bd718a9..4e2982e 100644 --- a/Jointure.md +++ b/Jointure.md @@ -75,7 +75,7 @@ C'est jointure est utilisée pour: ![](jointures/fullantijoin.svg) -## Jointure d'exclusion +## Jointure d'exclusion(jointure-dexclusion) Un jointure d'exclusion à gauche (left anti-join) garde uniquement les lignes pour lesquelles il n’y a **pas** de correspondance (c’est-à-dire que les colonnes de la table de droite sont NULL). diff --git a/aggregation.md b/aggregation.md index fc4d255..69dd347 100644 --- a/aggregation.md +++ b/aggregation.md @@ -145,10 +145,14 @@ SELECT SUM(vente) FROM ticket; ```sql select round(sum(quantite * prix_unitaire), 2) as chiffre_affaire from ligne; +>> 1914792.40 select sum(round(quantite * prix_unitaire, 2)) as chiffre_affaire from ligne; +>> 1915049.36 ``` +L'arrondi de la somme n'est pas égal à la somme des arrondis. + ### Moyenne Calcule la moyenne des valeurs d'une colonne numérique. @@ -167,11 +171,12 @@ select max(age) from adherent; Une autre solution consiste à trier la colonne est de limiter le résultat à une seule ligne -Afficher l'article le plus cher (avec son prix). (Pistache 63 €) +**Exercice :** Afficher l'article le plus cher (avec son prix). ```sql select article, prix from article order by prix desc limit 1; +>> Pistache 63 € ``` ### Minimum diff --git a/sousrequete.md b/sousrequete.md index 60a7b2f..b585618 100644 --- a/sousrequete.md +++ b/sousrequete.md @@ -150,6 +150,21 @@ WHERE prix > ALL ( Une sous-requête LATERAL (ou sous-requête latérale) permet à une sous-requête dans la clause FROM d’accéder aux colonnes déjà définies dans les relations qui la précèdent. +**Exercice :** Afficher pour chaque adhérent la date et le montant de son dernier ticket. + +```sql +select a.nom, a.prenom, dernier.date_ticket, + dernier.montant +from adherent a +join lateral ( + select * + from ticket_completZ + where adherent_id = a.id + order by date_ticket desc -- tri descendant + limit 1 +) dernier on dernier.adherent_id = a.id; +``` + ### CTE > Une requête CTE (Common Table Expression) est une construction SQL qui permet de définir une sous-requête temporaire, nommée, que l’on peut ensuite réutiliser dans une requête principale.