Ajustements questions
@@ -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 d’affaires 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 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;
|
||||
-- 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 d’un 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 d’affaires 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;
|
||||
|
||||
39
exercice.md
39
exercice.md
@@ -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 d’affaires global.
|
||||
- 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 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 d’affaires 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 d’un 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 d’affaires 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 n’ont pas encore de ticket doivent apparaître (avec 0).
|
||||
- 3 : Lister tous les tickets, avec le nom du client s’il 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 n’existe 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 n’ont jamais acheté de produit.
|
||||
- 7 : Lister les produits avec leur famille, même si certains produits n’ont 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
|
||||
|
||||
Reference in New Issue
Block a user