Exercice 2
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/reponses.sql
|
||||||
@@ -46,4 +46,4 @@ SELECT MIN(age) FROM utilisateurs;
|
|||||||
|
|
||||||
### Filtre après agrégation
|
### Filtre après agrégation
|
||||||
|
|
||||||
HAVING est emblable à WHERE, mais utilisé pour filtrer les résultats **après** un GROUP BY, sur les résultats des fonctions d'agrégation.
|
`HAVING` est emblable à `WHERE`, mais utilisé pour filtrer les résultats des fonctions d'agrégation **après** un `GROUP BY`.
|
||||||
|
|||||||
5
ToDo.md
Normal file
5
ToDo.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
28/08
|
||||||
|
- Export des familles en triant par code
|
||||||
|
- Guillemets autour du nom des articles car présence de virgule
|
||||||
|
- Nom des fichiers d'import identique aux noms des tables
|
||||||
|
- Convention de nommage
|
||||||
@@ -8,8 +8,8 @@ services:
|
|||||||
POSTGRES_USER: ${COMPOSE_PROJECT_NAME}
|
POSTGRES_USER: ${COMPOSE_PROJECT_NAME}
|
||||||
volumes:
|
volumes:
|
||||||
- database_data:/var/lib/postgresql/data:rw
|
- database_data:/var/lib/postgresql/data:rw
|
||||||
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
|
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:Z
|
||||||
- ./data:/tmp
|
- ./data:/tmp:Z
|
||||||
ports:
|
ports:
|
||||||
- 5432:5432
|
- 5432:5432
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
create table famille (
|
||||||
|
famille text primary key,
|
||||||
|
intitule text,
|
||||||
|
type int,
|
||||||
|
unite int
|
||||||
|
);
|
||||||
|
|
||||||
|
\COPY famille FROM '/tmp/famille.csv' (FORMAT CSV, header, ENCODING 'UTF8');
|
||||||
|
|
||||||
|
create table article (
|
||||||
|
code text primary key,
|
||||||
|
edi text,
|
||||||
|
stat1 text,
|
||||||
|
stat2 text,
|
||||||
|
article text,
|
||||||
|
famille text, -- references famille(famille)
|
||||||
|
factpoids int,
|
||||||
|
unitevente int,
|
||||||
|
prix decimal,
|
||||||
|
unitepoids int,
|
||||||
|
publie int,
|
||||||
|
suivistock int,
|
||||||
|
sommeil int
|
||||||
|
);
|
||||||
|
|
||||||
|
\COPY article FROM '/tmp/articles.csv' (FORMAT CSV, header, ENCODING 'UTF8');
|
||||||
|
|
||||||
|
create table ticket (
|
||||||
|
id int primary key,
|
||||||
|
horodatage timestamp,
|
||||||
|
client text,
|
||||||
|
mode_rglt int,
|
||||||
|
etat int,
|
||||||
|
facture text
|
||||||
|
);
|
||||||
|
|
||||||
|
\COPY ticket FROM '/tmp/tickets.csv' (FORMAT CSV, header, ENCODING 'UTF8');
|
||||||
|
|
||||||
|
create table ligne (
|
||||||
|
id int primary key,
|
||||||
|
ticket_id int, --references ticket (id),
|
||||||
|
article text, -- references article (code)
|
||||||
|
prix_unitaire decimal,
|
||||||
|
quantite decimal,
|
||||||
|
total decimal
|
||||||
|
);
|
||||||
|
|
||||||
|
\COPY ligne FROM '/tmp/lignes.csv' (FORMAT CSV, header, ENCODING 'UTF8');
|
||||||
|
|||||||
63
exercice.md
63
exercice.md
@@ -1,63 +0,0 @@
|
|||||||
# Exercices
|
|
||||||
|
|
||||||
## Schéma
|
|
||||||
|
|
||||||
Clients : id_client, nom, ville
|
|
||||||
|
|
||||||
Familles : id_famille, nom_famille
|
|
||||||
|
|
||||||
Produits : id_produit, nom_produit, prix_unitaire, id_famille
|
|
||||||
|
|
||||||
Tickets : id_ticket, date_vente, id_client
|
|
||||||
|
|
||||||
LignesTicket : id_ligne, id_ticket, id_produit, quantite, prix_unitaire
|
|
||||||
|
|
||||||
## Environnement
|
|
||||||
|
|
||||||
### Construire l'image
|
|
||||||
|
|
||||||
```shell
|
|
||||||
docker build -t iut/pgsql:2025-08 .
|
|
||||||
```
|
|
||||||
|
|
||||||
## Questions
|
|
||||||
|
|
||||||
### Exercice 1 : Nombre total de tickets
|
|
||||||
|
|
||||||
Trouver le nombre total de tickets enregistrés dans la base.
|
|
||||||
|
|
||||||
### Exercice 2 : Montant total des ventes
|
|
||||||
|
|
||||||
Calculer le chiffre d’affaires global (somme de quantite * prix_unitaire).
|
|
||||||
|
|
||||||
### Exercice 3 : Nombre de tickets par client
|
|
||||||
|
|
||||||
Pour chaque client, afficher son nom et le nombre de tickets qu’il a effectués.
|
|
||||||
|
|
||||||
### Exercice 4 : Panier moyen
|
|
||||||
|
|
||||||
Calculer le montant moyen d’un ticket (total ventes ÷ nombre de tickets).
|
|
||||||
|
|
||||||
### Exercice 5 : Produit le plus cher et le moins cher
|
|
||||||
|
|
||||||
Afficher le produit le plus cher et le produit le moins cher (avec leur prix).
|
|
||||||
|
|
||||||
### Exercice 6 : Familles de produits et nombre de produits
|
|
||||||
|
|
||||||
Pour chaque famille de produits, afficher le nom de la famille et le nombre de produits associés.
|
|
||||||
|
|
||||||
### Exercice 7 : Ventes par mois
|
|
||||||
|
|
||||||
Afficher, pour chaque mois, le chiffre d’affaires réalisé.
|
|
||||||
|
|
||||||
### Exercice 8 : Meilleur client
|
|
||||||
|
|
||||||
Trouver le client qui a dépensé le plus en montant total.
|
|
||||||
|
|
||||||
### Exercice 9 : Produit le plus vendu
|
|
||||||
|
|
||||||
Afficher le produit ayant généré le plus de ventes en quantité totale vendue.
|
|
||||||
|
|
||||||
### Exercice 10 : Répartition des ventes par famille
|
|
||||||
|
|
||||||
Pour chaque famille, afficher le montant total des ventes.
|
|
||||||
65
exercices.md
Normal file
65
exercices.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# Exercices
|
||||||
|
|
||||||
|
## Schéma
|
||||||
|
|
||||||
|
Clients : id_client, nom, ville
|
||||||
|
|
||||||
|
Familles : id_famille, nom_famille
|
||||||
|
|
||||||
|
Produits : id_produit, nom_produit, prix_unitaire, id_famille
|
||||||
|
|
||||||
|
Tickets : id_ticket, date_vente, id_client
|
||||||
|
|
||||||
|
LignesTicket : id_ligne, id_ticket, id_produit, quantite, prix_unitaire
|
||||||
|
|
||||||
|
## Environnement
|
||||||
|
|
||||||
|
### Construire l'image
|
||||||
|
|
||||||
|
```shell
|
||||||
|
docker build -t iut/pgsql:2025-08 .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Serie 1
|
||||||
|
|
||||||
|
- 1 : Quel est le nombre total de tickets enregistrés dans la base ?
|
||||||
|
- 2 : Calculer le chiffre d’affaires global.
|
||||||
|
- 3 : Pour chaque client, afficher son nom et le nombre de tickets qu’il a effectués.
|
||||||
|
- 4 : Calculer le montant moyen d’un ticket (total ventes ÷ nombre de tickets).
|
||||||
|
- 5 : Afficher le produit le plus cher et le produit le moins cher (avec leur prix).
|
||||||
|
- 6 : Pour chaque famille de produits, afficher le nom de la famille et le nombre de produits associés.
|
||||||
|
- 7 : Afficher, pour chaque mois, le chiffre d’affaires réalisé.
|
||||||
|
- 8 : Trouver le client qui a dépensé le plus en montant total.
|
||||||
|
- 9 : Afficher le produit ayant généré le plus de ventes en quantité totale vendue.
|
||||||
|
- 10 : Pour chaque famille, afficher le montant total des ventes.
|
||||||
|
|
||||||
|
## Série 2
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
- 6 : Lister les clients qui n’ont jamais acheté de 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".
|
||||||
|
|
||||||
|
|
||||||
|
Exercice — CROSS JOIN
|
||||||
|
Lister toutes les combinaisons possibles Client × Famille (même si elles n’existent pas en vrai).
|
||||||
|
|
||||||
|
Exercice 7 — Agrégation + JOIN
|
||||||
|
Pour chaque famille de produits, calculer le montant total des ventes.
|
||||||
|
|
||||||
|
Exercice 8 — SELF JOIN
|
||||||
|
Lister les couples de clients qui ont acheté au moins un produit en commun.
|
||||||
|
|
||||||
|
Exercice 9 — Jointure imbriquée
|
||||||
|
Lister les clients qui ont acheté des produits d’une famille donnée (ex: "Boissons").
|
||||||
|
|
||||||
|
Exercice 10 — Différence d’ensembles
|
||||||
|
Lister les clients qui n’ont jamais acheté de produit d’une famille donnée.
|
||||||
|
|
||||||
|
Exercice 11 — Différence d’ensembles (ANTI-JOIN) — clients n’ayant jamais acheté cette famille
|
||||||
Reference in New Issue
Block a user