Comment renvoyer une liste de texte DISTINCT / UNIQUE via Google QUERY?

12

Compte tenu de la liste des catégories et sous-catégories:

CatA    SubCatA
CatA    SubCatA
CatB    SubCatB
CatB    SubCatB
CatC    SubCatC
CatC    SubCatC

Je voudrais retourner toutes les catégories principales uniques basées sur la catégorie secondaire.

Je ne veux pas utiliser:

=QUERY(A1:B6,"SELECT A WHERE B = 'SubCatA'")

car il retourne la liste avec des doublons (le retour du premier élément n'aidera pas non plus).

Ce que j'essaie, c'est:

=QUERY(A1:B6,"SELECT A WHERE B = 'SubCatA' GROUP BY A")

mais cela me donne l'erreur:, CANNOT_GROUP_WITHOUT_AGGdonc j'essaye de trouver quelque chose d'équivalent à DISTINCT(A)ou UNIQUE(A), mais ces fonctions n'existent pas.

Existe-t-il une fonction dans le langage de requête de l'API de visualisation de Google équivalente à DISTINCT / UNIQUE pour renvoyer une liste de valeurs uniques?

Kenorb
la source

Réponses:

16

Sans requête:

=unique(filter(A1:A6, B1:B6="SubCatA"))

la source
Solution la plus simple.
Omiod
8

Vous devez ajouter une colonne d'assistance dans la QUERYformule, comme ceci:

=QUERY(
   {A1:B6, A1:A6},
   "SELECT Col1, COUNT(Col3) WHERE Col2 = 'SubCatA' GROUP BY Col1 LABEL COUNT(Col3) ''"
 )

L'ajout d'une autre QUERYformule aidera à supprimer la colonne d'aide:

=QUERY(
   QUERY(
     {A1:B6, A1:A6},
     "SELECT Col1, COUNT(Col3) WHERE Col2 = 'SubCatA' GROUP BY Col1"
   ), 
   "SELECT Col1"
 )
Jacob Jan Tuinstra
la source
8

En plus d'utiliser la fonction UNIQUE toujours utile autour de FILTER, comme user79865suggéré, vous pouvez également utiliser UNIQUE autour de la fonction QUERY d'origine (qui peut être plus applicable et utile dans d'autres scénarios pour préserver les options et la flexibilité de QUERY lorsque FILTER ne suffit pas. ).

Ainsi: =UNIQUE(QUERY(A1:B6,"SELECT A WHERE B = 'SubCatA'"))

aconlin
la source
4

Solution sans aides / fonctions wrapper:

=QUERY(A1:B6,"SELECT MAX(A) WHERE B = 'SubCatA' GROUP BY A LABEL MAX(A) ''")
David Vielhuber
la source
2

Utilisez la Unique(range)fonction.

Exemple:

=unique(query(Sheet2!A3:F2372,"SELECT C WHERE A contains '" &E1& "' AND B CONTAINS '" &E2& "'  ",-1))

Cela fonctionnera sur la récupération d'une colonne. Vous pouvez utiliser cette technique pour explorer davantage votre tâche. C'est plus simple. A, B, C sont des colonnes de la feuille Sheet2 tandis que E1, E2 sont de la feuille de calcul actuelle entourée de &.

M Waqar Hasan Khan
la source
0

OP demande spécifiquement via Google QUERY mais il existe un précédent qu'un autre A ne nécessite pas de QUERY et IMO une meilleure solution (car plus complète et polyvalente) serait d'appliquer un tableau croisé dynamique:

Exemple WA82879

Ceci (et les autres As) seraient de meilleures démonstrations de solutions si l'échantillon de données était plus réaliste.

pnuts
la source
-1

Que diriez-vous simplement:

= UNIQUE(A1:B6)
K9Blaze
la source