Skip to main content

Introduction

ClickHouse n’a pas d’opérateur pivot, mais nous pouvons obtenir un comportement similaire à l’aide des combinateurs de fonctions d’agrégation et, en particulier, de ceux dotés du suffixe -Map. Dans cet article, nous allons voir comment faire. Une vidéo couvrant le même sujet est également disponible, que vous pouvez regarder ci-dessous :

Comprendre les combinateurs de fonctions d’agrégation

Commençons par un exemple simple. Nous allons utiliser clickhouse-local, que vous pouvez démarrer en exécutant la commande suivante :
La requête suivante appelle la fonction sumMap, qui prend en entrée une map et additionne les valeurs de chaque clé :
Ce n’est pas un exemple particulièrement intéressant, puisqu’il renvoie la même Map que celle passée en entrée. Appelons maintenant sumMap sur plusieurs lignes de Maps ;
La clé ClickHouse apparaissait sur les deux lignes et ses valeurs ont été additionnées. La clé ClickBench n’était présente que sur une seule ligne ; une seule valeur est donc additionnée, ce qui renvoie cette valeur ! Nous pouvons également utiliser maxMap pour trouver les valeurs maximales pour chaque clé :
Ou nous pouvons également utiliser avgMap pour trouver la valeur moyenne pour chaque clé :
Nous espérons que cela vous a permis de mieux comprendre le fonctionnement de ces combinateurs de fonctions.

Application concrète : jeu de données sur les prix de l’immobilier au Royaume-Uni

Nous allons maintenant les utiliser sur un jeu de données plus volumineux dans le ClickHouse SQL playground. Nous pouvons nous connecter au playground à l’aide de clickhouse-client :
Nous allons interroger la table uk_price_paid ; examinons donc les données qu’elle contient :
Comme on peut le voir ci-dessus, la table contient différents champs liés aux ventes immobilières au Royaume-Uni.

Regroupement et agrégation par décennie

Calculons, pour chaque décennie du jeu de données, les prix médians par comté :

Filtrer les résultats

Nous pouvons filtrer les résultats pour n’inclure que les données à partir de 2010 :

Combiner plusieurs agrégations

Si nous voulons trouver le prix maximal par décennie, nous pouvons le faire à l’aide de la fonction maxMap que nous avons vue plus haut :

Appliquer des fonctions aux valeurs d’une map

Nous pouvons également calculer le prix moyen à l’aide de avgMap. Ces valeurs comportent beaucoup de décimales, que nous pouvons simplifier en utilisant la fonction mapApply pour appeler la fonction floor sur chaque valeur de la map :

Regroupement flexible : comtés, districts et codes postaux

Essayons de regrouper par différents champs. Cette fois, nous allons calculer le prix médian par décennie, regroupé par comté et par district :
Nous pourrions également choisir de regrouper par année, puis de concaténer postcode1 et postcode2 dans la map :
Dernière modification le 14 août 2026