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
-- 1a : Quel est le nombre total de ticket enregistrés dans la base ?
-- 1a : Quel est le nombre total de ticket ?
-- 101 615
SELECT COUNT(*) AS nb_ticket
FROM ticket;
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;
-- 1b : Quel est le nombre total d'adhérents ?
-- 2439
select count(*) as nb_adherent from adherent;
-- 2 : Calculer le chiffre daffaires global.
-- 1 881 766.53085
SELECT SUM(quantite * prix_unitaire) AS montant_total
FROM ligne;
select sum(quantite * prix_unitaire) as chiffre_affaire from ligne;
-- 3 : Pour chaque adhérent, afficher son nom et le nombre de ticket quil 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;
-- 3a : 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;
-- 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.
-- 18.52
SELECT AVG(total_ticket) AS panier_moyen
FROM (
SELECT t.id, SUM(l.quantite * l.prix_unitaire) AS total_ticket
FROM ticket t
JOIN ligne l ON t.id = l.ticket_id
GROUP BY t.id
select avg(total_ticket) as panier_moyen
from (
select t.id, sum(l.quantite * l.prix_unitaire) as total_ticket
from ticket t
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 article.article, prix
FROM article
ORDER BY prix DESC
LIMIT 1;
select article.article, prix
from article
order by prix desc
limit 1;
SELECT article.article, prix
FROM article
ORDER BY prix ASC
LIMIT 1;
select article.article, prix
from article
order by prix asc
limit 1;
-- 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;
-- 6a : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés.
select f.famille, count(a.code) as nb_produits
from famille f
left join article a on f.code = a.famille
group by f.famille;
-- 7 : Afficher, pour chaque mois, le chiffre daffaires réalisé.
SELECT DATE_TRUNC('month', t.date_ticket) AS mois,
SUM(l.quantite * l.prix_unitaire) AS montant_mensuel
FROM ticket t
JOIN ligne l ON t.id = l.ticket_id
GROUP BY DATE_TRUNC('month', t.date_ticket)
ORDER BY mois;
select date_trunc('month', t.date_ticket) as mois,
sum(l.quantite * l.prix_unitaire) as montant_mensuel
from ticket t
join ligne l on t.id = l.ticket_id
group by date_trunc('month', t.date_ticket)
order by mois;
-- 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 10;
-- 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
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 3;
-- 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
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
-- 10 : Pour chaque famille, afficher le montant total des ventes.
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;
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;
-- ----------
@@ -221,3 +234,23 @@ JOIN Produits p ON p.id_famille = f.id_famille
JOIN ligne lt ON lt.id_produit = p.id_produit
GROUP BY f.nom_famille
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
- 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 daffaires global.
- 3 : Pour chaque adhérent, afficher son nom et le nombre de ticket quil a effectués.
- 4 : Calculer le montant moyen dun 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 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.
- 1a : Quel est le nombre total de ticket ?
- 1b : Quel est le nombre total d'adhérents ?
- 2 : Calculer le chiffre daffaires global.
- 3a : Pour chaque adhérent, afficher son nom et son nombre de ticket.
- 3b : Quel est le détail du nombre de ticket pour ceux dont le nom de famille est Lavergne ?
- 3c : Quels sont les personnes qu iont exactement 72 tickets ?
- 4 : Calculer le montant moyen dun ticket.
- 5 : Afficher l'article le plus cher et l'article le moins cher (avec leur prix).
- 6a : Pour chaque famille, afficher le nom de la famille et le nombre d'articles associés.
- 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.
## 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