La question
Laplace Immo, un réseau national d’agences immobilières, voulait une preuve de concept : une base de données relationnelle des ventes immobilières que ses équipes pourraient interroger pour comprendre le marché. Le périmètre était le premier semestre 2020, une période qui inclut, par coïncidence, le premier confinement lié au COVID-19, du 17 mars au 11 mai.
Ma mission consistait à concevoir et construire la base, puis à répondre en SQL à douze questions métier : combien d’appartements vendus, où, à quel prix au mètre carré, et comment le marché a réagi à la crise.
- 34 169ventes immobilières, de janvier à juin 2020
- 4tables dans un schéma normalisé
- 12questions métier traitées en SQL
- +3,7 %de ventes du T1 au T2, malgré le confinement
Construire la base de données
Trois sources publiques ont alimenté la base : les fichiers DVF (Demandes de Valeurs Foncières), le registre officiel des ventes immobilières avec, pour chaque bien, son type, sa surface, son nombre de pièces, son prix et sa localisation ; les données du recensement de l’INSEE pour la population de chaque commune ; et le référentiel géographique de data.gouv pour les codes et noms des régions, départements et communes.
Avant de construire quoi que ce soit, j’ai rédigé un dictionnaire de données qui recense chaque champ avec son type, sa longueur, sa nature et ses règles de gestion, pour que n’importe qui puisse reprendre le projet. J’ai ensuite conçu un schéma normalisé de quatre tables reliées par des clés étrangères, ce qui évite de dupliquer les informations d’une commune sur chaque vente.

Côté RGPD, les données sont publiques et officielles, et seuls les champs nécessaires à l’analyse ont été conservés. Les données directement identifiantes ont été supprimées, et la base est sauvegardée régulièrement, stockée localement dans un répertoire dédié, avec un accès restreint. J’ai aussi préparé, dès la conception, une requête prête à l’emploi pour le droit à l’effacement (article 17). Elle n’utilise pas de suppression en cascade, un mécanisme qui effacerait automatiquement les lignes liées dans les autres tables : chaque suppression est écrite explicitement, pour garder un contrôle total sur ce qui est effacé et éviter toute suppression involontaire.
-- Droit à l'effacement : supprimer une vente, puis son bien seulement si plus rien n'y fait référence
DELETE FROM ventes WHERE id_vente = 'v001';
DELETE FROM biens
WHERE id_bien = 'b001'
AND NOT EXISTS (SELECT 1 FROM ventes WHERE ventes.id_bien = 'b001');
Où se sont vendus les appartements
31 378 appartements ont été vendus au premier semestre 2020, et l’Île-de-France en représente à elle seule 45 %, près de quatre fois plus que la région suivante.
- Île-de-France13 995
- Provence-Alpes-Côte d’Azur3 649
- Auvergne-Rhône-Alpes3 253
- Nouvelle-Aquitaine1 932
- Occitanie1 640
- Pays de la Loire1 357
Le marché est porté par les petites et moyennes surfaces : les deux-pièces arrivent en tête avec 31,2 % des ventes, devant les trois-pièces (28,6 %) et les une-pièce (21,5 %). Ensemble, les appartements d’une à trois pièces représentent 81 % des ventes, une demande façonnée par les primo-accédants et l’investissement locatif.
- 1 pièce21,5 %
- 2 pièces31,2 %
- 3 pièces28,6 %
- 4 pièces14,2 %
- 5 pièces3,6 %
Les prix : une carte des inégalités
- Paris12 049 €
- Hauts-de-Seine7 219 €
- Val-de-Marne5 339 €
- Alpes-Maritimes4 698 €
- Haute-Savoie4 667 €
- Seine-Saint-Denis4 337 €
- Yvelines4 223 €
- Rhône4 059 €
- Corse-du-Sud4 015 €
- Gironde3 764 €
Moyenne des prix au m² de chaque vente, calculés sur la surface Carrez.
Paris dépasse les 12 000 € le m², soit environ trois fois le prix constaté dans le Rhône ou en Corse-du-Sud, et les trois premiers départements sont tous en Île-de-France. Sur l’ensemble des départements, le prix moyen au m² va de moins de 700 € dans la Creuse à plus de 12 000 € à Paris. L’écart se maintient pour les grands logements : un appartement de cinq pièces ou plus coûte 8 750 € le m² en Île-de-France, quatre fois plus que dans les Hauts-de-France. Une maison en Île-de-France, à environ 4 000 € le m², reste bien plus abordable qu’un appartement parisien.
La taille compte aussi : un trois-pièces coûte 12 % de moins au m² qu’un deux-pièces. Les petites surfaces se paient plus cher, tant la demande est forte dans les zones tendues.
Le marché face au confinement
WITH quarters AS (
SELECT
COUNT(CASE WHEN date BETWEEN '2020-01-01' AND '2020-03-31' THEN 1 END) AS sales_q1,
COUNT(CASE WHEN date BETWEEN '2020-04-01' AND '2020-06-30' THEN 1 END) AS sales_q2
FROM ventes
)
SELECT sales_q1, sales_q2,
ROUND((sales_q2 - sales_q1) * 100.0 / sales_q1, 2) AS growth_pct
FROM quarters;
Les ventes sont passées de 16 776 au premier trimestre à 17 393 au deuxième : +3,7 %, alors que le confinement a couvert la moitié du deuxième trimestre. On aurait pu s’attendre à un effondrement. Cette légère hausse traduit plutôt un effet de rattrapage : les transactions gelées pendant le confinement ont été finalisées dès la levée des restrictions, en mai et en juin.
Les dynamiques locales
À l’échelle des communes, 48 communes ont enregistré au moins 50 ventes au premier trimestre, emmenées par les 17e, 15e et 18e arrondissements de Paris ; sept des dix premières sont des arrondissements parisiens, aux côtés de Nice, Bordeaux et Nantes.
Le volume brut favorise les grandes villes : la douzième question demandait donc de rapporter les ventes à la population. Parmi les communes de plus de 10 000 habitants, le marché le plus actif par habitant est le 2e arrondissement de Paris, avec 5,84 ventes pour 1 000 habitants. Trois pôles regroupent 17 des 20 premières : le centre de Paris (8 communes), le littoral méditerranéen (5) et la côte atlantique (4), qui relèvent de deux logiques : l’investissement urbain dense et les résidences secondaires en bord de mer.
Pour classer les communes au sein de chaque département, j’ai utilisé une fonction de fenêtrage. ROW_NUMBER() attribue un rang à chaque commune, ORDER BY les trie de la valeur moyenne de vente la plus élevée à la plus faible, et PARTITION BY fait repartir le classement à 1 pour chaque département. Il suffit ensuite de garder les rangs 1 à 3 pour obtenir le top 3 de chaque département en une seule requête :
ROW_NUMBER() OVER (
PARTITION BY biens.code_dep
ORDER BY AVG(ventes.montant) DESC
) AS rank_in_department
Les contrastes sont marqués même entre voisins : dans les Alpes-Maritimes, Saint-Jean-Cap-Ferrat arrive en tête avec une valeur moyenne de vente de 969 000 €, presque trois fois celle de Gignac-la-Nerthe, la première commune des Bouches-du-Rhône voisines, à 330 000 €. Dans le Rhône, une commune périurbaine, Ville-sur-Jarnioux (485 000 €), dépasse même les arrondissements les plus chers de Lyon.
Limites
- Un seul semestre, et un semestre inhabituel : le confinement rend difficile la distinction entre un effet saisonnier et un effet de crise, et DVF enregistre la date de l’acte notarié, signé deux à trois mois après le compromis : les ventes du deuxième trimestre correspondent donc surtout à des compromis signés avant le confinement. Les chiffres montrent le rattrapage de ces ventes, mais pas encore, ou du moins pas totalement, l’effet du confinement sur les nouveaux compromis.
- Les moyennes sont sensibles aux valeurs aberrantes de DVF. L’appartement le plus cher du semestre est enregistré à 9 millions d’euros pour 9,1 m² : très probablement un immeuble entier vendu en un seul acte, mais rattaché à un seul petit lot. Une seule vente de ce type suffit à faire monter le prix moyen au m² d’une commune. Une règle qui écarte les prix au m² extrêmes rendrait toutes les moyennes plus fiables.
- La comparaison entre trimestres compte tous les types de biens, maisons comprises, alors que le reste de l’analyse porte surtout sur les appartements : la hausse de 3,7 % ne décrit donc pas le seul marché des appartements.
Ce que j’en retiens
Rédiger le dictionnaire de données et le schéma avant la moindre requête m’a semblé long, mais cela a rendu les douze requêtes simples à écrire : je savais déjà dans quelle table se trouvait chaque information, avec quel type, et par quelle clé relier les tables entre elles. Pour la requête sur les ventes par habitant, par exemple, il suffisait de suivre les clés étrangères, des ventes vers les biens puis vers les communes, pour retrouver la population. Ce projet m’a aussi appris qu’un volume brut favorise toujours les grandes villes : rapporter les ventes à la population fait apparaître d’autres marchés, comme le 2e arrondissement de Paris, invisible dans un simple classement des ventes.