分组时结果总和不一致
sum of results inconsistent when grouping by
我运行以下查询来查找我的表中的重复项数
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
请让我知道我需要如何调整第二个查询以与我的初始查询结果一致。
谢谢!
我的猜测:你是 运行 一个 "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
对
SELECT SUM(duplicates)
FROM (
SELECT COUNT(*) as duplicates
FROM [publicdata:samples.shakespeare]
GROUP EACH BY word, word_count
HAVING COUNT(*)>1
)
130619
我运行以下查询来查找我的表中的重复项数
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
请让我知道我需要如何调整第二个查询以与我的初始查询结果一致。
谢谢!
我的猜测:你是 运行 一个 "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
对
SELECT SUM(duplicates)
FROM (
SELECT COUNT(*) as duplicates
FROM [publicdata:samples.shakespeare]
GROUP EACH BY word, word_count
HAVING COUNT(*)>1
)
130619