使用Google表格,我如何创建一个输出' 0'如果一个值不存在?

时间:2017-02-28 22:08:36

标签: google-sheets

我有一个电子表格(https://docs.google.com/spreadsheets/d/1R0zYMAigDULzm8oM2icsPK55BP162kVvctpx2cOSOIE/edit?usp=sharing)我每次访问商店时都会在每行输入Groceries。

enter image description here

我创建了一个查询来输出所有行的每个商店的总和。这很有效。

=QUERY(A9:C, 
  "select C,
  SUM(B) 
  where B is not null
  GROUP BY C 
  LABEL C '', SUM(B) ''")

enter image description here

现在我想使用几乎相同的查询,但我想将其限制为仅对过去六个月的条目求和。这是我的问题:

=QUERY(A9:C, 
  "select C,
  SUM(B)
  where date '2016-08-28' < A
  GROUP BY C 
  LABEL C '', SUM(B) ''")

enter image description here

这也很好用,除了我想让它列出所有商店,如果没有商店的条目(例如Bristol Farms和Safeway在这个例子中),那么我想要的不是省略它它显示为0。

所以我希望它显示如下:

enter image description here

我该怎么做?

2 个答案:

答案 0 :(得分:1)

好问题!

我认为,跳过零结果的行是query函数的自然行为。我的建议是使用条件相反且没有标题的第二个查询。

解决方法

<强>步骤1。原始查询

假设我们有小表,如下所示:

Name    Sum
Ma       10
Mu       20
Mo       30
Mi       40

任务是获取所有行&cum; 10:

=QUERY({D83:E87},"select Col1, Col2 where Col2 > 10")

结果是:

Name    Sum
Mu       20
Mo       30
Mi       40

<强>第二步。相反的查询

让我们以相反的条件进行另一个查询:

=QUERY({D83:E87},"select Col1, 0 where Col2 <= 10 label Col1 '', 0 ''")

结果是:

Ma        0

在此查询中:

  • select Col1, 0为所有行提供零
  • label Col1 '', 0 ''跳过标题

<强>步骤3。组合

最后要做的是将公式合并为单个数组{}

={QUERY({D83:E87},"select Col1, Col2 where Col2 > 10");QUERY({D83:E87},"select Col1, 0 where Col2 <= 10 label Col1 '', 0 ''")}

结果:

Name    Sum
Mu       20
Mo       30
Mi       40
Ma        0

关于提供的解决方案的坏处是零将在结果的最后。

在您的情况下,最终的公式是:

={QUERY(A9:C, 
  "select C,
  SUM(B)
  where date '2016-08-28' < A
  GROUP BY C 
  LABEL C '', SUM(B) ''");
  UNIQUE(QUERY(A9:C, 
  "select C,
  0
  where date '2016-08-28' >= A and A is not null  
  LABEL C '', 0 ''"))}

我使用unique函数,因为Google Sheet SQL不包含distinct optoin。

结果:

Ralphs           120
Walmart          350
Bristol Farms      0
Safeway            0

获得唯一和零的另一种方法是这个公式:

={QUERY(A9:C, 
  "select C,
  SUM(B)
  where date '2016-08-28' < A
  GROUP BY C 
  LABEL C '', SUM(B) ''");
  QUERY(A9:C, 
  "select C,
  sum(B) - sum(B)
  where date '2016-08-28' >= A and B > 0
  group by C  
  LABEL C '', sum(B) - sum(B) ''")}
  • sum(B) - sum(B)给出了零
  • group by C提供独特的
  • where date '2016-08-28'是相反的条件
  • and B > 0用于剪切空结果。

答案 1 :(得分:1)

如果您不介意额外的列(可以隐藏它),请在电子表格中将其放入J9:

=ARRAYFORMULA(if(A9:A13>Date(2016,8,28),B9:B13,0))

这在K11:

=QUERY(A9:J13,"select C, sum(J) group by C order by C label sum(J)''")

我无法让Max的答案与sum一起工作。也许你可以。