lateral

2025-09-07 22:59:02 +02:00
parent f637e2e1b0
commit 25556ef7ca
4 changed files with 39 additions and 3 deletions

18
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) - 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 chiffre d'affaire global [voir](aggregation.md#somme)
- Calculer le montant de chaque ticket - Calculer le montant de chaque ticket
- Afficher l'article le plus cher (avec son prix). [voir](aggregation.md#maximum)
### Jointures ### Jointures
- Lister les articles dont la famille n'existe pas [voir](Jointure.md#jointure-dexclusion). - 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 ### 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 _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. 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) - 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) - 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, ...) - 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 larticle le plus cher du catalogue. - 14 : Lister les tickets qui contiennent larticle le plus cher du catalogue.

@@ -75,7 +75,7 @@ C'est jointure est utilisée pour:
![](jointures/fullantijoin.svg) ![](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 ny a **pas** de correspondance (cest-à-dire que les colonnes de la table de droite sont NULL). Un jointure d'exclusion à gauche (left anti-join) garde uniquement les lignes pour lesquelles il ny a **pas** de correspondance (cest-à-dire que les colonnes de la table de droite sont NULL).

@@ -145,10 +145,14 @@ SELECT SUM(vente) FROM ticket;
```sql ```sql
select round(sum(quantite * prix_unitaire), 2) as chiffre_affaire from ligne; 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; 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 ### Moyenne
Calcule la moyenne des valeurs d'une colonne numérique. 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 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 ```sql
select article, prix from article select article, prix from article
order by prix desc limit 1; order by prix desc limit 1;
>> Pistache 63
``` ```
### Minimum ### Minimum

@@ -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 daccéder aux colonnes déjà définies dans les relations qui la précèdent. Une sous-requête LATERAL (ou sous-requête latérale) permet à une sous-requête dans la clause FROM daccé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 ### 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 lon peut ensuite réutiliser dans une requête principale. > Une requête CTE (Common Table Expression) est une construction SQL qui permet de définir une sous-requête temporaire, nommée, que lon peut ensuite réutiliser dans une requête principale.