Devoir N°1 en langage SQL
Une société veut modéliser son système de gestion des ventes, pour cela elle élabore le modèle relationnel suivant
- Client (clt_num, clt_nom, clt_prenom, clt_pays, clt_loc, clt_type)
- Commandes(cmd_num, cmd_date, #clt_num, #mag_num)
- Magasin(mag_num, mag_loc, mag_gerant)
- Ligne_cmd(#cmd_num, #art_num, lcd_qte, lcd_liv, lvd_pu, lcd_date_liv)
- Article(art_num, art_nom, art_poids, art_stock, art_pa, art_pv, #art_four)
Une fois le modèle relationnel est implémenté, l'administrateur de la base de données souhaite récupérer certaines informations de la base de données à l'aide du langage SQL. Ecrire les requêtes SQL pour récupérer ces informations
- Donnéer le numéro des articles vendus, avec pour chacun le prix moyen de vente et le nombre de ventes
Select art_num, AVG(lcd_pu), count(*) from Ligne_cmd group by art_num
- Donner par magasin les statistiques de vente en 2019, à savoir le nombre de vente, le nombre de clients différents, et le nombre de jours ou il y a eu des ventes
select mag_num, count(*) as "Nombre de ventes", count(DISTINCT clt_num) as "Nombre de clients", count(DISTINCT cmd_date) as "Nombre de jours" from Commandes where YEAR(cmd_date)=2019 group by mag_num
- Donner les numéros des client qui ont acheté plus qu'une fois dans la semaine du 6 au 10 juin
select clt_num from Commandes where cmd_date between "2019-06-06" and "2019-06-10" group by clt_num having count(*)>1
- Donner pour les années 2017 à 2019, le nombre de clients différents sur une année tous lagasin confondus
select YEAR(cmd_date), count(DISTINCT clt_num) from Commandes where YEAR(cmd_date) between 2017 and 2019 group by YEAR(cmd_date)
- Classer les localités en fonction du nombre décroissant de clients qui y habitent
select clt_loc from client group by clt_loc order by count(*) DESC
- Donner le numéro et la date d'achat des clients n'ayant acheté qu'une fois
select cmd_num, cmd_date from Commandes where clt_num in (select clt_num from Commandes group by clt_num having count(*)=1)
- Donner la liste des clients qui n'ont pas encore acheté des articles
select * from Client where clt_num not in (select distinct clt_num from Commandes)
- Donner le numéro des articles dont ma moyenne des quantités vendues est supérieure à la moyenne des quantités vendues en une fois tous articles confondus
select art_num from Ligne_cmd group by art_num having AVG(lcd_qte)>(select AVG(lcd_qte) from Ligne_cmd)
- Donner le numéro et le nom des articles qui ont été vendu à un prix de vente unitaire supérieur au prix de vente dans le catalogue
select A.art_num, A.art_nom from Article AS A join Ligne_cmd as L on A.art_num=L.art_num where L.lct_pu>A.art_pv group by A.art_num, A.art_nom
Partager ce cours avec tes amis :
Rédigé par
ESSADDOUKI
Mostafa