Подсчет количества предметов в двух взаимоисключающих рядах категорий - PullRequest
0 голосов
/ 28 мая 2020

Вот лист для тестирования: https://docs.google.com/spreadsheets/d/11CoQ_PAtVNQBkbtnHH0xR4bhCQVU-pcz645h1akTQuA/edit?usp=sharing

У меня есть такая таблица:

| id | category | irrelevant |
|----|----------|------------|
| 1  | cat1     | FALSE      |
| 2  | cat2     | FALSE      |
| 3  |          | TRUE       |
| 4  | cat1     | FALSE      |

Каждый элемент имеет идентификатор и категорию или , если он считается нерелевантным, у него нет категории, а столбец «нерелевантный» помечен как ИСТИНА.

Я бы хотел написать формулу, которая будет возвращать количество элементов в каждой категории плюс строка с количеством нерелевантных элементов. Таким образом, в приведенном выше случае результат будет:

| category   | number |
|------------|--------|
| cat1       | 2      |
| cat2       | 1      |
| irrelevant | 1      |

Если я попробую что-то вроде:

=QUERY(A1:C5,"select B,count(A) group by B")

, я получу правильные числа, но поскольку «не имеет значения "не является категорией, ее ячейка пуста, поэтому результат будет:

| category | count id |
|----------|----------|
|          |        1 |
| cat1     |        2 |
| cat2     |        1 |

Обратите внимание на пустую ячейку« B2 ». Есть ли способ переименовать его в «нерелевантный» без изменения первой таблицы? Я пытался просто подсчитать нерелевантные элементы.

=transpose(query(A1:C5, "select count(A) where C = TRUE label count(A) 'irrelevant'"))

, который возвращает мне просто

| irrelevant | 1 |

А затем немного изменил первую формулу, чтобы она не Не подсчитываем "пустые" категории и, наконец, объединяем их обе в массив:

={
  QUERY(A1:C5,"select B,count(A) where B <> '' group by B");
  TRANSPOSE(QUERY(A1:C5, "select count(A) where C = TRUE label count(A) 'irrelevant'"))
}

Это возвращает мне то, что я хочу для приведенного выше примера

| category   | count id |
|------------|----------|
| cat1       |        2 |
| cat2       |        1 |
| irrelevant |        1 |

Но это победило ' t работает, если в моей исходной таблице нет нерелевантных элементов. Это может произойти в зависимости от диапазона, который я выбрал для запроса, поэтому, если я хочу запросить такую ​​таблицу:

| id | category | irrelevant |
|----|----------|------------|
|  5 | cat1     |    FALSE   |
|  6 | cat2     |    FALSE   |
|  7 | cat2     |    FALSE   |
|  8 | cat3     |    FALSE   |

Решение, которое я нашел, не будет работать. Есть предложения, как я могу это сделать?

1 Ответ

1 голос
/ 29 мая 2020

попробуйте:

=ARRAYFORMULA(QUERY(IF((B2:B="")*(C2:C<>""), "irrelevant", ), 
 "select Col1,count(Col21) 
  where Col1 is not null
  group by Col1
  label count(Col2)''"))
...