Ajustements questions

2025-08-29 07:44:46 +02:00
parent 76f08b5d4a
commit 354cd0c939
2 changed files with 123 additions and 71 deletions

@@ -1,87 +1,100 @@
-- Réponses -- Réponses
-- 1a : Quel est le nombre total de ticket enregistrés dans la base ? -- 1a : Quel est le nombre total de ticket ?
-- 101 615 -- 101 615
SELECT COUNT(*) AS nb_ticket select count(*) as nb_ticket from ticket;
FROM ticket;
-- 1b : Quel est le nombre total d'adhérents enregistrés dans la base ? -- 1b : Quel est le nombre total d'adhérents ?
-- 2800 -- 2439
SELECT COUNT(*) AS nb_adherent select count(*) as nb_adherent from adherent;
FROM adherent;
-- 2 : Calculer le chiffre daffaires global. -- 2 : Calculer le chiffre daffaires global.
-- 1 881 766.53085 -- 1 881 766.53085
SELECT SUM(quantite * prix_unitaire) AS montant_total select sum(quantite * prix_unitaire) as chiffre_affaire from ligne;
FROM ligne;
-- 3 : Pour chaque adhérent, afficher son nom et le nombre de ticket quil a effectués. -- 3a : Pour chaque adhérent, afficher son nom et son nombre de ticket.
SELECT a.nom, select a.nom,
COUNT(t.id) AS nb_ticket count(t.id) as nb_ticket
FROM adherent a from adherent a
JOIN ticket t ON a.id = t.client_id join ticket t on a.id = t.client_id
GROUP BY a.id; group by a.id;
-- 3b : Pour chaque adhérent, afficher son nom et son nombre de ticket.
select a.nom,
count(t.id) as nb_ticket
from adherent a
join ticket t on a.id = t.client_id
where a.nom = 'Lavergne'
group by a.id;
-- 3c : Pour chaque adhérent, afficher son nom et son nombre de ticket.
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
having count(t.id) = 72;
-- 4 : Calculer le montant moyen dun ticket. -- 4 : Calculer le montant moyen dun ticket.
-- 18.52 -- 18.52
SELECT AVG(total_ticket) AS panier_moyen select avg(total_ticket) as panier_moyen
FROM ( from (
SELECT t.id, SUM(l.quantite * l.prix_unitaire) AS total_ticket select t.id, sum(l.quantite * l.prix_unitaire) as total_ticket
FROM ticket t from ticket t
JOIN ligne l ON t.id = l.ticket_id join ligne l on t.id = l.ticket_id
GROUP BY t.id group by t.id
) sous_requete; ) sous_requete;
-- 5 : Afficher le produit le plus cher et le produit le moins cher (avec leur prix). -- 5 : Afficher le produit le plus cher et le produit le moins cher (avec leur prix).
SELECT article.article, prix select article.article, prix
FROM article from article
ORDER BY prix DESC order by prix desc
LIMIT 1; limit 1;
SELECT article.article, prix select article.article, prix
FROM article from article
ORDER BY prix ASC order by prix asc
LIMIT 1; limit 1;
-- 6 : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés. -- 6a : 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 select f.famille, count(a.code) as nb_produits
FROM famille f from famille f
LEFT JOIN article a ON f.famille = a.famille left join article a on f.code = a.famille
GROUP BY f.intitule; group by f.famille;
-- 7 : Afficher, pour chaque mois, le chiffre daffaires réalisé. -- 7 : Afficher, pour chaque mois, le chiffre daffaires réalisé.
SELECT DATE_TRUNC('month', t.date_ticket) AS mois, select date_trunc('month', t.date_ticket) as mois,
SUM(l.quantite * l.prix_unitaire) AS montant_mensuel sum(l.quantite * l.prix_unitaire) as montant_mensuel
FROM ticket t from ticket t
JOIN ligne l ON t.id = l.ticket_id join ligne l on t.id = l.ticket_id
GROUP BY DATE_TRUNC('month', t.date_ticket) group by date_trunc('month', t.date_ticket)
ORDER BY mois; order by mois;
-- 8 : Trouver les 10 adhérents qui ont dépensé le plus en montant total. -- 8 : Trouver les 3 adhérents qui ont dépensé le plus en montant total.
SELECT c.nom, SUM(l.quantite * l.prix_unitaire) AS total_depense select c.nom, sum(l.quantite * l.prix_unitaire) as total_depense
FROM adherent c from adherent c
JOIN ticket t ON c.id = t.client_id join ticket t on c.id = t.client_id
JOIN ligne l ON t.id = l.ticket_id join ligne l on t.id = l.ticket_id
GROUP BY c.nom group by c.nom
ORDER BY total_depense DESC order by total_depense desc
LIMIT 10; limit 3;
-- 9 : Afficher l'article ayant généré le plus de ventes en quantité totale vendue. -- 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 select a.article, sum(l.quantite) as total_vendu
FROM article a from article a
JOIN ligne l ON a.code = l.article join ligne l on a.code = l.article
GROUP BY a.article group by a.article
ORDER BY total_vendu DESC order by total_vendu desc
LIMIT 1 limit 1
-- 10 : Pour chaque famille, afficher le montant total des ventes. -- 10 : Pour chaque famille, afficher le montant total des ventes.
SELECT f.famille, select f.famille,
SUM(l.quantite * l.prix_unitaire) AS total_famille sum(l.quantite * l.prix_unitaire) as total_famille
FROM famille f from famille f
JOIN article a ON f.famille = a.famille join article a on f.famille = a.famille
JOIN ligne l ON a.code = l.article join ligne l on a.code = l.article
GROUP BY f.famille group by f.famille
ORDER BY total_famille DESC; order by total_famille desc;
-- ---------- -- ----------
@@ -221,3 +234,23 @@ JOIN Produits p ON p.id_famille = f.id_famille
JOIN ligne lt ON lt.id_produit = p.id_produit JOIN ligne lt ON lt.id_produit = p.id_produit
GROUP BY f.nom_famille GROUP BY f.nom_famille
ORDER BY total_ventes DESC; ORDER BY total_ventes DESC;
--
select f.code, f.famille, count(a.code) as nb_produits
from famille f
left join article a on f.code = a.famille
group by f.code having count(a.code) = 0 order by f.code;
select distinct a.famille from article a
left join famille f on f.code = a.famille
where f.code is null
order by a.famille
SELECT DISTINCT ON (f.code)
f.code AS famille_id,
f.famille AS famille_nom,
a.article AS article_exemple
FROM famille f
LEFT JOIN article a ON a.famille = f.code
where f.famille is null
ORDER BY f.code, a.code;

@@ -2,14 +2,33 @@
## Série 1 ## Série 1
- 1a : Quel est le nombre total de ticket enregistrés dans la base ? - 1a : Quel est le nombre total de ticket ?
- 1b : Quel est le nombre total d'adhérents enregistrés dans la base ? - 1b : Quel est le nombre total d'adhérents ?
- 2 : Calculer le chiffre daffaires global. - 2 : Calculer le chiffre daffaires global.
- 3 : Pour chaque adhérent, afficher son nom et le nombre de ticket quil a effectués. - 3a : Pour chaque adhérent, afficher son nom et son nombre de ticket.
- 4 : Calculer le montant moyen dun ticket. - 3b : Quel est le détail du nombre de ticket pour ceux dont le nom de famille est Lavergne ?
- 5 : Afficher l'article le plus cher et l'article le moins cher (avec leur prix). - 3c : Quels sont les personnes qu iont exactement 72 tickets ?
- 6 : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés. - 4 : Calculer le montant moyen dun ticket.
- 7 : Afficher, pour chaque mois, le chiffre daffaires réalisé. - 5 : Afficher l'article le plus cher et l'article le moins cher (avec leur prix).
- 8 : Trouver l'adhérent qui a dépensé le plus en montant total. - 6a : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés.
- 9 : Afficher l'article ayant généré le plus de ventes en quantité totale vendue. - 6b : Quel est le nombre d'article de la famille
- 7 : Afficher, pour chaque mois, le chiffre daffaires réalisé.
- 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. - 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".
- Lister