Réponses
@@ -1,76 +1,86 @@
|
||||
-- Réponses
|
||||
|
||||
-- 1 : Quel est le nombre total de ticket enregistrés dans la base ?
|
||||
-- 1a : Quel est le nombre total de ticket enregistrés dans la base ?
|
||||
-- 101 615
|
||||
SELECT COUNT(*) AS nb_ticket
|
||||
FROM ticket;
|
||||
|
||||
-- 1b : Quel est le nombre total d'adhérents enregistrés dans la base ?
|
||||
-- 2800
|
||||
SELECT COUNT(*) AS nb_adherent
|
||||
FROM adherent;
|
||||
|
||||
-- 2 : Calculer le chiffre d’affaires global.
|
||||
-- 1 881 766.53085
|
||||
SELECT SUM(quantite * prix_unitaire) AS montant_total
|
||||
FROM Lignesticket;
|
||||
FROM ligne;
|
||||
|
||||
-- 3 : Pour chaque client, afficher son nom et le nombre de ticket qu’il a effectués.
|
||||
SELECT c.nom, COUNT(t.id_ticket) AS nb_ticket
|
||||
FROM client c
|
||||
JOIN ticket t ON c.id_client = t.id_client
|
||||
GROUP BY c.nom;
|
||||
-- 3 : Pour chaque adhérent, afficher son nom et le nombre de ticket qu’il a effectués.
|
||||
SELECT a.nom,
|
||||
COUNT(t.id) AS nb_ticket
|
||||
FROM adherent a
|
||||
JOIN ticket t ON a.id = t.client_id
|
||||
GROUP BY a.id;
|
||||
|
||||
-- 4 : Calculer le montant moyen d’un ticket (total ventes ÷ nombre de ticket).
|
||||
-- 4 : Calculer le montant moyen d’un ticket.
|
||||
-- 18.52
|
||||
SELECT AVG(total_ticket) AS panier_moyen
|
||||
FROM (
|
||||
SELECT t.id_ticket, SUM(lt.quantite * lt.prix_unitaire) AS total_ticket
|
||||
SELECT t.id, SUM(l.quantite * l.prix_unitaire) AS total_ticket
|
||||
FROM ticket t
|
||||
JOIN Lignesticket lt ON t.id_ticket = lt.id_ticket
|
||||
GROUP BY t.id_ticket
|
||||
JOIN ligne l ON t.id = l.ticket_id
|
||||
GROUP BY t.id
|
||||
) sous_requete;
|
||||
|
||||
-- 5 : Afficher le produit le plus cher et le produit le moins cher (avec leur prix).
|
||||
SELECT nom_produit, prix_unitaire
|
||||
FROM Produits
|
||||
ORDER BY prix_unitaire DESC
|
||||
SELECT article.article, prix
|
||||
FROM article
|
||||
ORDER BY prix DESC
|
||||
LIMIT 1;
|
||||
|
||||
SELECT nom_produit, prix_unitaire
|
||||
FROM Produits
|
||||
ORDER BY prix_unitaire ASC
|
||||
SELECT article.article, prix
|
||||
FROM article
|
||||
ORDER BY prix ASC
|
||||
LIMIT 1;
|
||||
|
||||
-- 6 : Pour chaque famille de produits, afficher le nom de la famille et le nombre de produits associés.
|
||||
SELECT f.nom_famille, COUNT(p.id_produit) AS nb_produits
|
||||
FROM Familles f
|
||||
LEFT JOIN Produits p ON f.id_famille = p.id_famille
|
||||
GROUP BY f.nom_famille;
|
||||
-- 6 : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés.
|
||||
SELECT f.intitule, COUNT(a.code) AS nb_produits
|
||||
FROM famille f
|
||||
LEFT JOIN article a ON f.famille = a.famille
|
||||
GROUP BY f.intitule;
|
||||
|
||||
-- 7 : Afficher, pour chaque mois, le chiffre d’affaires réalisé.
|
||||
SELECT DATE_TRUNC('month', t.date_vente) AS mois,
|
||||
SUM(lt.quantite * lt.prix_unitaire) AS montant_mensuel
|
||||
SELECT DATE_TRUNC('month', t.date_ticket) AS mois,
|
||||
SUM(l.quantite * l.prix_unitaire) AS montant_mensuel
|
||||
FROM ticket t
|
||||
JOIN Lignesticket lt ON t.id_ticket = lt.id_ticket
|
||||
GROUP BY DATE_TRUNC('month', t.date_vente)
|
||||
JOIN ligne l ON t.id = l.ticket_id
|
||||
GROUP BY DATE_TRUNC('month', t.date_ticket)
|
||||
ORDER BY mois;
|
||||
|
||||
-- 8 : Trouver le client qui a dépensé le plus en montant total.
|
||||
SELECT c.nom, SUM(lt.quantite * lt.prix_unitaire) AS total_depense
|
||||
FROM client c
|
||||
JOIN ticket t ON c.id_client = t.id_client
|
||||
JOIN Lignesticket lt ON t.id_ticket = lt.id_ticket
|
||||
-- 8 : Trouver les 10 adhérents qui ont dépensé le plus en montant total.
|
||||
SELECT c.nom, SUM(l.quantite * l.prix_unitaire) AS total_depense
|
||||
FROM adherent c
|
||||
JOIN ticket t ON c.id = t.client_id
|
||||
JOIN ligne l ON t.id = l.ticket_id
|
||||
GROUP BY c.nom
|
||||
ORDER BY total_depense DESC
|
||||
LIMIT 1;
|
||||
LIMIT 10;
|
||||
|
||||
-- 9 : Afficher le produit ayant généré le plus de ventes en quantité totale vendue.
|
||||
SELECT p.nom_produit, SUM(lt.quantite) AS total_vendu
|
||||
FROM Produits p
|
||||
JOIN Lignesticket lt ON p.id_produit = lt.id_produit
|
||||
GROUP BY p.nom_produit
|
||||
-- 9 : Afficher l'article ayant généré le plus de ventes en quantité totale vendue.
|
||||
SELECT a.article, SUM(l.quantite) AS total_vendu
|
||||
FROM article a
|
||||
JOIN ligne l ON a.code = l.article
|
||||
GROUP BY a.article
|
||||
ORDER BY total_vendu DESC
|
||||
LIMIT 1;
|
||||
LIMIT 1
|
||||
|
||||
-- 10 : Pour chaque famille, afficher le montant total des ventes.
|
||||
SELECT f.nom_famille, SUM(lt.quantite * lt.prix_unitaire) AS total_famille
|
||||
FROM Familles f
|
||||
JOIN Produits p ON f.id_famille = p.id_famille
|
||||
JOIN Lignesticket lt ON p.id_produit = lt.id_produit
|
||||
GROUP BY f.nom_famille
|
||||
SELECT f.famille,
|
||||
SUM(l.quantite * l.prix_unitaire) AS total_famille
|
||||
FROM famille f
|
||||
JOIN article a ON f.famille = a.famille
|
||||
JOIN ligne l ON a.code = l.article
|
||||
GROUP BY f.famille
|
||||
ORDER BY total_famille DESC;
|
||||
|
||||
-- ----------
|
||||
@@ -117,7 +127,7 @@ SELECT
|
||||
p.nom_produit,
|
||||
CASE WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM Lignesticket lt
|
||||
FROM ligne lt
|
||||
WHERE lt.id_produit = p.id_produit
|
||||
) THEN TRUE ELSE FALSE END AS deja_vendu
|
||||
FROM Produits p
|
||||
@@ -128,7 +138,7 @@ SELECT
|
||||
p.nom_produit,
|
||||
COALESCE(SUM(CASE WHEN lt.id_ligne IS NOT NULL THEN 1 ELSE 0 END), 0) > 0 AS deja_vendu
|
||||
FROM Produits p
|
||||
LEFT JOIN Lignesticket lt ON lt.id_produit = p.id_produit
|
||||
LEFT JOIN ligne lt ON lt.id_produit = p.id_produit
|
||||
GROUP BY p.id_produit, p.nom_produit;
|
||||
|
||||
-- 6 : ANTI-JOIN (différence)
|
||||
@@ -147,8 +157,8 @@ SELECT DISTINCT
|
||||
c2.nom AS client_2
|
||||
FROM client c1
|
||||
JOIN ticket t1 ON t1.id_client = c1.id_client
|
||||
JOIN Lignesticket lt1 ON lt1.id_ticket = t1.id_ticket
|
||||
JOIN Lignesticket lt2 ON lt2.id_produit = lt1.id_produit
|
||||
JOIN ligne lt1 ON lt1.id_ticket = t1.id_ticket
|
||||
JOIN ligne lt2 ON lt2.id_produit = lt1.id_produit
|
||||
JOIN ticket t2 ON t2.id_ticket = lt2.id_ticket
|
||||
JOIN client c2 ON c2.id_client = t2.id_client
|
||||
WHERE c1.id_client < c2.id_client;
|
||||
@@ -166,7 +176,7 @@ Lister les ticket contenant au moins un produit de la famille "Boissons".
|
||||
SELECT DISTINCT c.id_client, c.nom
|
||||
FROM client c
|
||||
JOIN ticket t ON t.id_client = c.id_client
|
||||
JOIN Lignesticket lt ON lt.id_ticket = t.id_ticket
|
||||
JOIN ligne lt ON lt.id_ticket = t.id_ticket
|
||||
JOIN Produits p ON p.id_produit = lt.id_produit
|
||||
JOIN Familles f ON f.id_famille = p.id_famille
|
||||
WHERE f.nom_famille = 'Boissons'
|
||||
@@ -178,7 +188,7 @@ FROM client c
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM ticket t
|
||||
JOIN Lignesticket lt ON lt.id_ticket = t.id_ticket
|
||||
JOIN ligne lt ON lt.id_ticket = t.id_ticket
|
||||
JOIN Produits p ON p.id_produit = lt.id_produit
|
||||
JOIN Familles f ON f.id_famille = p.id_famille
|
||||
WHERE t.id_client = c.id_client
|
||||
@@ -191,7 +201,7 @@ FROM client c
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT t.id_client
|
||||
FROM ticket t
|
||||
JOIN Lignesticket lt ON lt.id_ticket = t.id_ticket
|
||||
JOIN ligne lt ON lt.id_ticket = t.id_ticket
|
||||
JOIN Produits p ON p.id_produit = lt.id_produit
|
||||
JOIN Familles f ON f.id_famille = p.id_famille
|
||||
WHERE f.nom_famille = 'Boissons'
|
||||
@@ -208,6 +218,6 @@ SELECT
|
||||
SUM(lt.quantite * lt.prix_unitaire) AS total_ventes
|
||||
FROM Familles f
|
||||
JOIN Produits p ON p.id_famille = f.id_famille
|
||||
JOIN Lignesticket lt ON lt.id_produit = p.id_produit
|
||||
JOIN ligne lt ON lt.id_produit = p.id_produit
|
||||
GROUP BY f.nom_famille
|
||||
ORDER BY total_ventes DESC;
|
||||
|
||||
15
exercice.md
15
exercice.md
@@ -2,13 +2,14 @@
|
||||
|
||||
## Série 1
|
||||
|
||||
- 1 : Quel est le nombre total de tickets enregistrés dans la base ?
|
||||
- 1a : Quel est le nombre total de ticket enregistrés dans la base ?
|
||||
- 1b : Quel est le nombre total d'adhérents 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.
|
||||
- 3 : Pour chaque adhérent, afficher son nom et le nombre de ticket qu’il a effectués.
|
||||
- 4 : Calculer le montant moyen d’un ticket.
|
||||
- 5 : Afficher l'article le plus cher et l'article le moins cher (avec leur prix).
|
||||
- 6 : Pour chaque famille, afficher le nom de la famille et le nombre d'articles 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.
|
||||
- 8 : Trouver l'adhérent qui a dépensé le plus en montant total.
|
||||
- 9 : Afficher l'article ayant généré le plus de ventes en quantité totale vendue.
|
||||
- 10 : Pour chaque famille, afficher le montant total des ventes.
|
||||
|
||||
Reference in New Issue
Block a user