Environnement Docker et exercices

This commit is contained in:
2025-08-27 07:51:06 +02:00
parent 1228c169ff
commit 380d9e5e9f
5 changed files with 124 additions and 3 deletions

View File

@@ -1,6 +1,6 @@
# Fonctions d'agrégation
> En SQL, une agrégation est une opération qui permet de combiner plusieurs valeurs de données en une seule valeur résumée. Les opérations d'agrégation sont souvent utilisées en combinaison avec la clause GROUP BY pour regrouper les données selon des critères spécifiques avant de les résumer.
> En SQL, une agrégation est une opération qui permet de combiner plusieurs valeurs de données en une seule valeur résumée. Les opérations d'agrégation sont souvent utilisées en combinaison avec la clause `GROUP BY` pour regrouper les données selon des critères spécifiques avant de les résumer.
### Compter
@@ -44,6 +44,6 @@ Retourne la valeur minimale dans une colonne.
SELECT MIN(age) FROM utilisateurs;
```
### Filtre après aggré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 **après** un GROUP BY, sur les résultats des fonctions d'agrégation.

22
compose.yaml Normal file
View File

@@ -0,0 +1,22 @@
services:
database:
image: pgsql:2025.09
build:
context: ./pgsql
environment:
POSTGRES_INITDB_ARGS: "--locale-provider=icu --icu-locale=fr-FR"
POSTGRES_DB: ${COMPOSE_PROJECT_NAME}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
POSTGRES_USER: ${COMPOSE_PROJECT_NAME}
healthcheck:
test: ["CMD", "pg_isready", "-d", "${COMPOSE_PROJECT_NAME}", "-U", "${COMPOSE_PROJECT_NAME}"]
timeout: 5s
retries: 5
start_period: 20s
volumes:
- database_data:/var/lib/postgresql/data:rw
- ./pgsql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- ./pgsql/data:/tmp
volumes:
database_data:

55
exercice.md Normal file
View File

@@ -0,0 +1,55 @@
# 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
## 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.

0
initdb.sql Normal file
View File

44
pgsql/Dockerfile Normal file
View File

@@ -0,0 +1,44 @@
# Étape 1 : builder temporaire pour compiler pgTAP
FROM debian:trixie AS builder
# Installer les outils nécessaires pour compiler pgTAP
RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
build-essential \
ca-certificates \
postgresql-server-dev-17 \
make
# Cloner et compiler pgTAP
RUN git clone --depth 1 https://github.com/theory/pgtap.git /usr/src/pgtap && \
cd /usr/src/pgtap && \
make && \
make install DESTDIR=/pgtap-dist
# Étape 2 : image finale PostgreSQL propre
FROM postgres:17.5
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
locales; \
sed -i '/fr_FR.UTF-8/s/^# //' /etc/locale.gen; \
locale-gen
ENV TZ Europe/Paris
ENV LANG=fr_FR.UTF-8
ENV LANGUAGE=fr_FR:fr
ENV LC_ALL=fr_FR.UTF-8
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
postgresql-postgis
# Copier uniquement les fichiers installés depuis le builder
COPY --from=builder /pgtap-dist/ /
# Scripts init et données
COPY ./docker-entrypoint-initdb.d /docker-entrypoint-initdb.d
COPY ./data /tmp