Exercice 2

This commit is contained in:
2025-08-28 07:13:19 +02:00
parent bd64e734bf
commit f067959843
7 changed files with 122 additions and 66 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/reponses.sql

View File

@@ -46,4 +46,4 @@ SELECT MIN(age) FROM utilisateurs;
### 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
View 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

View File

@@ -8,8 +8,8 @@ services:
POSTGRES_USER: ${COMPOSE_PROJECT_NAME}
volumes:
- database_data:/var/lib/postgresql/data:rw
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- ./data:/tmp
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:Z
- ./data:/tmp:Z
ports:
- 5432:5432

View File

@@ -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');

View File

@@ -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 daffaires global (somme de quantite * prix_unitaire).
### Exercice 3 : Nombre de tickets par client
Pour chaque client, afficher son nom et le nombre de tickets quil a effectués.
### Exercice 4 : Panier moyen
Calculer le montant moyen dun 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 daffaires 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
View 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 daffaires global.
- 3 : Pour chaque client, afficher son nom et le nombre de tickets quil a effectués.
- 4 : Calculer le montant moyen dun 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 daffaires 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 nont pas encore de ticket doivent apparaître (avec 0).
- 3 : Lister tous les tickets, avec le nom du client sil 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 nexiste 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 nont jamais acheté de produit.
- 7 : Lister les produits avec leur famille, même si certains produits nont 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 nexistent 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 dune famille donnée (ex: "Boissons").
Exercice 10 — Différence densembles
Lister les clients qui nont jamais acheté de produit dune famille donnée.
Exercice 11 — Différence densembles (ANTI-JOIN) — clients nayant jamais acheté cette famille