Location d'appartements en groupe

[20 min]

Soit le schéma relationnel suivant gérant le fonctionnement d'une agence de location d'appartements.

1
APPARTEMENT(#code_appt:String, adresse:String, type:{studio,F1,F2,F3,F4,F5+}, prix_loyer:Real)
2
LOCATAIRE(#code_loc:String, nom:String, prenom:String)
3
LOCATION(#code_loc=>Locataire, #code_appt=>Appartement)
4
PAIEMENT_LOYER(#code_loc=>Locataire, #code_appt=>Appartement, #date_payement:Date, prix_paye:Real)

Question

En SQL afficher le nombre d'appartements de chaque type, uniquement pour les types qui commencent par la lettre F.

Solution

1
SELECT COUNT(*) 
2
FROM appartement
3
WHERE type LIKE 'F%'
4
GROUP BY type
5

Question

En SQL afficher le total payé par locataire (avec son code, nom et prenom) pour l'ensemble de ses appartements.

Solution

1
SELECT L.code_loc, L.nom, L.prenom, SUM(P.prix_paye)
2
From locataire L, paiement_loyer P
3
WHERE L.code_loc=P.code_loc
4
GROUP BY L.code_loc, L.nom, L.prenom
Attention

nom et prenom sont obligatoires dans le group by : cf Single-Value Rule.

Question

En SQL afficher les locataires (code uniquement) qui louent au moins 2 appartements, en précisant le nombre d'appartements loués et la moyenne des loyers, et trié par ordre décroissant de cette moyenne.

Solution

1
SELECT L.code_loc, COUNT(A.code_appt), AVG(A.prix_loyer)
2
FROM location L JOIN appartement A
3
ON A.code_appt=L.code_appt
4
GROUP BY L.code_loc
5
HAVING COUNT(A.code_appt)>1
6
ORDER BY AVG(A.prix_loyer) DESC