查询中的 IF 语句

IF statement in query

我有一个 table 包含两列 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函数。我知道我可以在我的 sheet 中创建两个中间列(一个用于正值,一个用于负值),但我想知道是否可以通过查询或以某种方式在没有中间列的情况下实现我想要的。

有关使用 FILTER 函数的示例,请参阅此 sheet,对于此用例,它可能比您的查询函数更好: https://docs.google.com/spreadsheets/d/1DW5CyPCC71CopW48uKy6basn-WP4hMfh7kuuJXT-C4o/edit?usp=sharing

我不知道你所说的标签是什么意思,但我只是创建了一个随机单词列表,10 个否定词和 10 个肯定词

A 列中有标签,B 列中有数字。然后在 D 列中,我将其用于 "positive" 过滤器:

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

对于正和:

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

在负过滤器的 E 列中:

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

对于负和:

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

编辑:我在工作簿中添加了另一个 sheet,向您展示了如何在标签的过滤列表中列出每个标签旁边的总和: 在这个 sheet 上,我创建了如何列出每个特定标签的总和的示例:https://docs.google.com/spreadsheets/d/1DW5CyPCC71CopW48uKy6basn-WP4hMfh7kuuJXT-C4o/edit#gid=1784614303

此公式将查看 A 列和 B 列中 tags/values 的列表,然后对 D 列左侧单元格中的所有标签进行匹配和求和:

=sum(filter($B:$B,$B:$B>0,$A:$A=D3))
=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"))

如果一定要使用查询功能,假设你的Tag Data在A列,Values在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