Как вернуть DISTINCT / UNIQUE список текста через Google QUERY?

12

Приведен список категорий и подкатегорий:

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

Я хотел бы вернуть все уникальные основные категории на основе вторичной категории.

Я не хочу использовать:

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

так как он возвращает список с дубликатами (возврат первого элемента тоже не поможет).

Что я пытаюсь это:

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

но это дает мне ошибку: CANNOT_GROUP_WITHOUT_AGGпоэтому я пытаюсь найти что-то эквивалентное либо, DISTINCT(A)либо UNIQUE(A), но эти функции не существуют.

Есть ли какая-либо функция в языке запросов Google Visualization API, эквивалентная DISTINCT / UNIQUE, для возврата списка уникальных значений?

kenorb
источник

Ответы:

16

Без запроса:

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

источник
Самое простое решение.
Omiod
8

Вам нужно добавить вспомогательный столбец в QUERYформулу, например так:

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

Добавление другой QUERYформулы поможет удалить вспомогательный столбец:

=QUERY(
   QUERY(
     {A1:B6, A1:A6},
     "SELECT Col1, COUNT(Col3) WHERE Col2 = 'SubCatA' GROUP BY Col1"
   ), 
   "SELECT Col1"
 )
Джейкоб Ян Туинстра
источник
8

В дополнение к использованию всегда полезной функции UNIQUE для FILTER, как это user79865предлагается, вы также можете использовать UNIQUE для исходной функции QUERY (которая может быть более применимой и полезной в других сценариях для сохранения параметров и гибкости QUERY, когда FILTER недостаточно). ).

Вот так: =UNIQUE(QUERY(A1:B6,"SELECT A WHERE B = 'SubCatA'"))

aconlin
источник
4

Решение без помощников / функций-оболочек:

=QUERY(A1:B6,"SELECT MAX(A) WHERE B = 'SubCatA' GROUP BY A LABEL MAX(A) ''")
Дэвид Вильхубер
источник
2

Используйте Unique(range)функцию.

Пример:

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

Это будет работать на одном столбце поиска. Вы можете использовать эту технику для дальнейшего изучения вашей задачи. Это проще A, B, C - столбцы из Sheet2, а E1, E2 - из текущей рабочей таблицы, окруженные &.

М Вакар Хасан Хан
источник
0

OP специально запрашивает через Google QUERY, но есть прецедент, что другой A не требует QUERY и IMO, лучшее решение (потому что более всеобъемлющее и универсальное) будет применять сводную таблицу:

Пример WA82879

Это (и другое As) было бы лучшей демонстрацией решений, если бы выборка данных была более реалистичной.

pnuts
источник