【问题标题】:IF statement in query查询中的 IF 语句
【发布时间】:2018-04-27 21:35:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

      【解决方案2】:
      =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"))
      

      【讨论】:

      • 我得到:“函数 ARRAY_ROW 参数 3 的行大小不匹配。预期:100。实际:1。”也许我错过了什么?
      • @Tohiko CTRL+SHIFT+ENTER 或检查新公式。
      【解决方案3】:

      请参阅此表以获取使用 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))
      

      【讨论】:

      • 这不允许我按标签对金额进行分组。意思是,我想计算与共享相同标签的所有行相对应的小计。
      • 如果不链接到示例表,您将不清楚您到底想做什么...但是您绝对可以使用过滤器来计算每个标签的总数...我会将其添加到示例中表
      • 好的,我添加了另一张表,向您展示如何对每个标签进行小计。有关详细信息,请参阅答案中的“编辑”。
      猜你喜欢
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 2022-06-20
      相关资源
      最近更新 更多