Retour aux fonctions

QUERY

Exécute une requête au langage de type Google Visualization API Query Language sur des données.

GoogleQUERY(data, query, [headers])

QUERY exécute une commande de type SQL sur une plage et renvoie le résultat sous forme de tableau. Elle peut filtrer, trier, regrouper, agréger, faire pivoter et renommer des données en une seule formule, ce qui en fait la fonction la plus puissante de Google Sheets. Si vous enchaînez FILTER, SORT, SUMIF et UNIQUE, il existe probablement une seule QUERY qui fait le même travail.

Syntaxe

=QUERY(data, query, [headers])
  • data : La plage ou le tableau à interroger, par exemple A1:E100 ou Feuille2!A:E.
  • query : Une chaîne de texte dans le langage de requête de l'API Google Visualization. Elle doit être entre guillemets.
  • headers [Facultatif] : Le nombre de lignes d'en-tête dans data. Si omis, Sheets le devine, ce qui peut mal tourner. Indiquez-le explicitement, par exemple 1.

Références de colonnes

Dans la chaîne de requête, désignez les colonnes par leur lettre : A, B, C, etc. C'est le choix naturel quand votre plage commence en colonne A. Si la plage commence ailleurs, ou si data est un tableau littéral comme {A:A, C:C} ou le résultat d'une autre fonction comme IMPORTRANGE, utilisez plutôt Col1, Col2, Col3 (la position dans les données). Entourer une plage normale d'accolades, {D1:F100}, permet aussi d'utiliser les noms de type Col1.

Les en-têtes des données ne font pas partie du texte de la requête. Si vos en-têtes sont sur la première ligne, QUERY(A1:E100, "select A, C", 1) utilise la ligne 1 comme en-têtes.

Les clauses, dans l'ordre

Une requête est composée de clauses qui doivent apparaître dans cet ordre :

select ... where ... group by ... pivot ... order by ... limit ... offset ... label ... format

Toutes les clauses sont facultatives. Voici celles que vous utiliserez le plus.

select

Choisit les colonnes à renvoyer.

=QUERY(A1:E100, "select A, C, E", 1)

Utilisez select * pour toutes les colonnes.

where

Filtre les lignes.

=QUERY(A1:E100, "select A, B where C > 100", 1)
  • Le texte doit être entre apostrophes simples : where B = 'Ventes'.
  • Combinez les conditions avec and, or et not : where C > 100 and B = 'Ventes'.
  • Recherche dans du texte : where A contains 'inc', where A starts with 'A', where A matches '.*corp$' (expression régulière).
  • Valeurs manquantes : where C is not null.

order by et limit

=QUERY(A1:E100, "select A, C order by C desc limit 5", 1)

Renvoie les cinq lignes ayant les plus grandes valeurs dans la colonne C.

group by et agrégats

Les fonctions d'agrégation sont sum, avg, count, min et max.

=QUERY(A1:E100, "select B, sum(C) group by B", 1)

Renvoie le total de C pour chaque valeur distincte de B : un tableau de synthèse rapide qui demanderait sinon UNIQUE plus SUMIF. Chaque colonne de select doit soit figurer dans group by, soit être entourée d'un agrégat.

pivot

Transforme les valeurs distinctes d'une colonne en colonnes.

=QUERY(A1:E100, "select B, sum(C) group by B pivot D", 1)

label et format

Renommer ou mettre en forme les colonnes du résultat :

=QUERY(A1:E100, "select B, sum(C) group by B label sum(C) 'Total des ventes' format sum(C) '#,##0'", 1)

Utiliser des valeurs de cellules dans une requête

Construisez la chaîne de requête en concaténant des références de cellules. Les dates et le texte demandent de bien soigner les guillemets.

=QUERY(A1:E100, "select A, C where B = '" & G1 & "'", 1)

Si G1 contient Ventes, la requête devient where B = 'Ventes'. Pour les nombres, pas de guillemets : "where C > " & G2.

Les dates doivent être converties dans la forme attendue par le langage de requête :

=QUERY(A1:E100, "select A, C where D >= date '" & TEXT(G1, "yyyy-mm-dd") & "'", 1)

Combiner des plages de plusieurs feuilles

Utilisez un tableau littéral pour empiler les plages, puis désignez les colonnes par Col1, Col2, etc. :

=QUERY({Jan!A2:C; Fev!A2:C}, "select Col1, sum(Col3) group by Col1", 0)

Ici, le point-virgule empile les plages verticalement.

Erreurs courantes

  • Unable to parse query string for Function QUERY parameter 2: .... Généralement une faute de frappe ou une clause dans le mauvais ordre. Vérifiez l'ordre ci-dessus et que les valeurs de texte sont entre apostrophes simples.
  • #VALUE! avec « column ... does not exist ». Vous avez utilisé une lettre de colonne en dehors de la plage, ou A/B alors que les données sont un tableau (utilisez Col1/Col2).
  • Types de données mélangés dans une colonne. QUERY détermine le type d'une colonne d'après la majorité de ses valeurs et traite la minorité comme vide. Une colonne numérique contenant quelques textes les perd silencieusement. Nettoyez d'abord la colonne.
  • En-têtes mal devinés. Renseignez toujours le troisième argument.
  • Totaux faux avec group by. Les nombres stockés comme du texte ne s'additionnent pas. Convertissez-les d'abord en vrais nombres.

QUERY, FILTER ou tableau croisé dynamique ?

FILTER est plus simple pour filtrer des lignes ponctuellement. QUERY l'emporte quand il faut aussi trier, agréger ou sélectionner des colonnes dans la même étape. Un tableau croisé dynamique est préférable pour l'exploration interactive, tandis que QUERY vous donne une formule qui reste vivante et peut alimenter d'autres formules. Pour un tour complet, lisez Maîtriser la fonction QUERY dans Google Sheets.

Questions fréquentes

QUERY est-elle la même chose que SQL ? Elle y ressemble mais c'est un dialecte limité : pas de jointures, et les colonnes se désignent par leur lettre. Pour des jointures, combinez d'abord les plages ou utilisez XLOOKUP.

QUERY peut-elle récupérer des données d'un autre fichier ? Oui : =QUERY(IMPORTRANGE("url", "Feuille1!A:E"), "select Col1, Col3 where Col2 = 'Ventes'", 1). Notez qu'on utilise alors Col1, Col2.

Se met-elle à jour automatiquement ? Oui. Le résultat est recalculé dès que les données sources ou une cellule utilisée dans la chaîne de requête changent.

Fonctions associées

  • FILTER : Renvoie les lignes d'une plage qui remplissent une condition.
  • SORT : Trie les lignes d'une plage.
  • UNIQUE : Renvoie les lignes distinctes d'une plage.
  • SUMIF : Additionne les valeurs qui remplissent une condition.
  • IMPORTRANGE : Importe une plage depuis un autre classeur.

Articles associés

Newsletter

Plus d'exemples sur QUERY arrivent bientôt.

Nous préparons des mises à jour courtes et pratiques pour les utilisateurs avancés de Sheets.