IF оператор в запросе - PullRequest
       33

IF оператор в запросе

0 голосов
/ 28 апреля 2018

У меня есть таблица с двумя столбцами A и B, первый - это тег, а второй - сумма. Я пытаюсь написать запрос с двумя столбцами, один суммирует отрицательные значения, а другой суммирует положительные.

Исходя из SQL, я попробовал следующее

=QUERY(A1:B100, 
      "SELECT A, SUM( B * IF(B>0, 0, 1) ), 
                 SUM( B * IF(B<0, 0, 1) ) GROUP BY A ")

Но, похоже, функция IF не поддерживается в запросе. Я знаю, что могу создать два промежуточных столбца на своем листе (один для положительного значения и один для отрицательных), но мне было интересно, можно ли достичь того, что я хочу, с помощью запроса или каким-либо образом без промежуточных столбцов.

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018
=arrayformula(query({a1:a100,if(b1:b100>0,b1:b100,),if(b1:b100<0,b1:b100,)},"Select Col1,sum(Col2),sum(Col3) group by Col1"))
0 голосов
/ 28 апреля 2018

Если вы должны использовать функцию запроса, предполагая, что ваши данные тега находятся в столбце A, а ваши значения в столбце B:

=arrayformula(query({A1:A100,if(B1:B100>0,B1:B100,),if(B1:B100<0,B1:B100,)},"Select Col1, sum(Col2), sum(Col3) where Col1 <>'' group by Col1 label Col1 'Tag', sum(Col2) 'Positive', sum(Col3) 'Negative'"))

Вот пример вывода: https://docs.google.com/spreadsheets/d/1DW5CyPCC71CopW48uKy6basn-WP4hMfh7kuuJXT-C4o/edit#gid=1606239479

0 голосов
/ 28 апреля 2018

Пожалуйста, посмотрите этот лист для примера использования функции FILTER, которая, вероятно, лучше, чем ваша функция запроса для этого варианта использования: https://docs.google.com/spreadsheets/d/1DW5CyPCC71CopW48uKy6basn-WP4hMfh7kuuJXT-C4o/edit?usp=sharing

Я не знал, что вы имели в виду под тегом, но я только создал список случайных слов, 10 отрицательных и 10 положительных

С тегами в столбце A и числами в столбце B. Затем в столбце D я поместил это для «положительного» фильтра:

=filter($A$2:$A,$B$2:$B>0)

А для положительной суммы:

=sum(filter($B$3:$B,$B$3:$B>0))

А в столбце E для отрицательного фильтра:

=filter($A$2:$A,$B$2:$B<0)

А для отрицательной суммы:

=sum(filter($B$3:$B,$B$3:$B<0))

РЕДАКТИРОВАТЬ: я добавил еще один лист в книгу, которая показывает вам, как перечислить сумму рядом с каждым тегом в отфильтрованном списке тегов: На этом листе я создал примеры того, как перечислить итоговые суммы каждого конкретного тега: https://docs.google.com/spreadsheets/d/1DW5CyPCC71CopW48uKy6basn-WP4hMfh7kuuJXT-C4o/edit#gid=1784614303

Эта формула будет искать список тегов / значений в столбцах A и B, а затем сопоставлять и суммировать все теги, которые находятся в ячейке слева в столбце D:

=sum(filter($B$3:$B,$B$3:$B>0,$A$3:$A=D3))
...