web-dev-qa-db-fra.com

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

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'")

comme il retourne la liste avec les doublons (retourner le premier élément ne l'aidera pas non plus).

Ce que j'essaye c'est:

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

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

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

9
kenorb

Vous devez ajouter une colonne d'assistance dans la formule QUERY, comme suit:

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

Ajouter une autre formule QUERY aidera à supprimer la colonne d'assistance:

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

Sans une requête:

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

En plus d'utiliser la fonction toujours utile UNIQUE autour de FILTER, comme le suggère user79865, 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 quand FILTER ne suffit pas).

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

6
aconlin

Utilisez la fonction Unique(range).

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 facile. A, B, C sont des colonnes de la feuille Sheet2 tandis que E1, E2 sont de la feuille de calcul courante entourée de &.

2
M Waqar Hasan Khan

Solution sans fonctions d'aide/wrapper:

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

OP demande spécifiquement via Google QUERY , mais il existe un précédent selon lequel un autre A n'exige pas de QUERY et que l'OMI offre une meilleure solution (car plus complète et plus polyvalente): soit appliquer un tableau croisé dynamique:

WA82879 example

Ceci (et l'autre As) constituerait une meilleure démonstration des solutions si l'échantillon de données était plus réaliste.

0
pnuts