Como retornar uma lista de texto DISTINCT / UNIQUE via Google QUERY?

12

Dada a lista de categorias e subcategorias:

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

Gostaria de retornar todas as categorias principais exclusivas com base na categoria secundária.

Eu não quero usar:

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

pois está retornando a lista com duplicatas (o retorno do primeiro elemento também não ajuda).

O que estou tentando é:

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

mas isso me dá o erro:, CANNOT_GROUP_WITHOUT_AGGportanto, estou tentando encontrar algo equivalente a um DISTINCT(A)ou outro UNIQUE(A), mas essas funções não existem.

Existe alguma função no Query Language da API de visualização do Google equivalente a DISTINCT / UNIQUE para retornar a lista de valores exclusivos?

kenorb
fonte

Respostas:

16

Sem uma consulta:

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

fonte
Solução mais simples.
Omiod 10/10
8

Você precisa adicionar uma coluna auxiliar dentro da QUERYfórmula, da seguinte maneira:

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

Adicionar outra QUERYfórmula ajudará a remover a coluna auxiliar:

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

Além de usar a sempre útil função UNIQUE ao redor do FILTER, como user79865sugere, você também pode usar o UNIQUE ao redor da função QUERY original (que pode ser mais aplicável e útil em outros cenários para preservar as opções e a flexibilidade do QUERY quando o FILTRO não é suficiente )

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

Aconlin
fonte
4

Solução sem funções auxiliares / invólucro:

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

Use a Unique(range)função

Exemplo:

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

Isso funcionará na recuperação de uma coluna. Você pode usar esta técnica para explorar ainda mais sua tarefa. Isto é mais fácil. A, B, C são colunas da Planilha2, enquanto E1, E2 são da planilha atual cercada por &.

M Waqar Hasan Khan
fonte
0

O OP pergunta especificamente via Google QUERY, mas existe um precedente de que outro A não exija uma QUERY e a IMO uma solução melhor (porque mais abrangente e versátil) seria aplicar uma tabela dinâmica:

Exemplo WA82879

Isso (e o outro As) seriam melhores demonstrações de soluções se a amostra de dados fosse mais realista.

nozes
fonte
-1

Que tal apenas:

= UNIQUE(A1:B6)
K9Blaze
fonte