BigQuery中SUM的SUM,没有重复

时间:2016-06-14 12:50:46

标签: google-bigquery

由于多个行业代码与给定邮政编码的业务相匹配,因此我有一个商家名称与邮政编码的一对多关系的表格。一个单独的表格按邮政编码包含住户。为了按照商业名称对一系列邮政编码没有重复的家庭进行求和,我查询: SELECT DBAName,SUM(Households)OVER(PARTITION BY ZIPCode)AS SumHouseholds
从事业务 加入位置
ON Location.ZIPCode = Business.ZIPCode
其中ZIPCode喜欢'1001%'和DBAName ='ABC Plumbing' GROUP BY DBAName,ZIPCode,Households
订购SumHouseholds Desc

得到:
行DBAName SumHouseholds
1 ABC水暖30
2 ABC管道25
3 ABC Plumbing 5

每行代表该范围内的不同邮政编码,以及其重复数据删除的住户总和。但是,我想将SumHouseholds与那些行= 60相加。当我尝试为此嵌套SELECT语句时:

SELECT DBAName,SUM(SumHouseholds)AS TotalHouseholds FROM(
SELECT DBAName,SUM(Households)OVER(PARTITION BY ZIPCode)AS SumHouseholds
从事业务 加入位置
ON Location.ZIPCode = Business.ZIPCode
在哪里ZIPCode喜欢'1001%'和DBAName ='ABC Plumbing') GROUP BY DBAName
按总户数订购

它返回所有匹配记录重复项的家庭总和。由于3条记录与每个邮政编码的查询匹配,因此结果为30x3 + 25x3 + 5x3 = 180。

如何更改查询以返回SUM(SumHouseholds)= 60?

1 个答案:

答案 0 :(得分:1)

尝试以下

SELECT DBAName, SUM(SumHouseholds) AS TotalHouseholds 
FROM (
  SELECT DBAName, ZIPCode, SUM(Households) AS SumHouseholds
  FROM Business
  JOIN Location
  ON Location.ZIPCode = Business.ZIPCode
  //WHERE ZIPCode LIKE '1001%' AND DBAName = 'ABC Plumbing'
  GROUP BY DBAName, ZIPCode
)
GROUP BY DBAName
ORDER BY TotalHouseholds