查询中的IF语句

时间:2018-04-27 21:35:51

标签: google-sheets spreadsheet google-apps google-sheets-query

我有一个包含两列AB的表格,第一列是标记,第二列是金额。我正在尝试用两列写一个查询,一个总结负值而另一个总结正值。

来自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 :(得分:1)

如果必须使用查询功能,假设您的标签数据位于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

答案 1 :(得分:0)

请参阅此表以获取使用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列和A列中的标签/值列表。 B,然后匹配并汇总D列中左侧单元格中的所有标签:

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

答案 2 :(得分:0)

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