时间:2015-08-04 16:40:29

标签: google-bigquery

我运行以下查询以查找表格中重复的数量

SELECT
sum(duplicates)
FROM
  (SELECT
  COUNT (*) as duplicates
  FROM
  db.4585_20150727,
  db.5691_20150727,
  db.9884263_20150727,
  db.9884623_20150727 
  WHERE
  (A LIKE "1" OR A LIKE "2" OR A LIKE "3") AND
  B NOT LIKE "XYZ" AND ID IS NOT null 
GROUP EACH BY
ID
having
count (*) >1)

我想知道哪些类型的单位是重复的以及在哪里。 field_1是单位类型,field_2是单位位置。单个单元类型可以位于多个位置,并且位置可以具有多个单元类型。我希望看到每单位类型,单位位置的重复数量,而不是仅仅看到重复的总数。

当我运行以下内容时,我的结果数与第一个查询的输出不一致。我几乎可以肯定,这种不一致是由于群体所致。 group by是否可能过滤掉某些行?重复的总和不应该与第一个查询相同吗?下面的查询结果小于上面的重复查询的初始总和的结果。唯一的区别是我在我的选择和分组中包括field_1和field_2。

SELECT
field_1,
field_2,
sum(duplicates)
FROM
  (SELECT
  field_1,
  field_2,
  COUNT (*) as duplicates
  FROM
  db.4585_20150727,
  db.5691_20150727,
  db.9884263_20150727,
  db.9884623_20150727 
  WHERE
  (A LIKE "1" OR A LIKE "2" OR A LIKE "3") AND
  B NOT LIKE "XYZ" AND ID IS NOT null 
GROUP EACH BY
field_1,
field_2,
ID
having
count (*) >1)
group each by
field_1,
field_2

请告诉我如何调整第二个查询以与初始查询的结果保持一致。

谢谢!

1 个答案:

答案 0 :(得分:3)

我的猜测:您正在运行“HAVING COUNT()> 1”。第一个查询运行时,它会过滤一些元素。当第二个查询运行时,由于它具有更多限制性组,因此COUNT()= 1存储桶中会有更多行,因此会对其进行过滤。

SELECT SUM(duplicates)
FROM (
  SELECT COUNT(*) as duplicates
  FROM [publicdata:samples.shakespeare] 
  GROUP EACH BY word
  HAVING COUNT(*)>1
)

149130

VS

SELECT SUM(duplicates)
FROM (
  SELECT COUNT(*) as duplicates
  FROM [publicdata:samples.shakespeare] 
  GROUP EACH BY word, word_count
  HAVING COUNT(*)>1
)

130619