BigQuery SQL如何提供不同的DISTINCT和GROUP BY结果?

时间:2018-01-13 16:04:29

标签: sql google-bigquery

我们似乎从Google Big Query中的旧SQL和标准SQL中获得了两个不同的,互不兼容的结果。

这是我们的标准SQL查询...它给出了218,529行的答案。

SELECT DISTINCT(EID)
FROM test.ourBQtable

这是我们的遗留SQL查询...

SELECT COUNT(EID) AS Total, EID 
FROM [ourBQproject:test.ourBQtable] 
GROUP BY EID 
ORDER BY Total DESC

这显示的结果如下表所示,但显示了218,529行结果:

Total     EID
376       jb+qLvHMm5JrMkNybAi6uC75FzgsGcNQhJ19IeWFDcQ=
352       JGqNBgicm+mpcYBS4K7AI2WXI3xaSgMkktb+7oOjjnQ=

如何使用看似重复的EID(其中376个如表中的一个案例所示) - 但是当使用DISTINCT(EID)命令时 - 行数不会减少? DISTINCT不应该过滤掉所有重复的行吗?我们真的有重复的行吗?

我们理解中缺少什么?

2 个答案:

答案 0 :(得分:2)

您的代码似乎工作正常。

DISTINCT EID表示EID有218,529个不同的值。这应该为218,529个不同的EID s。

中的每一个返回一行

当您使用GROUP BY时,每个EID都会获得一行。在这种情况下,您获得相同的数字。

尝试运行此查询:

SELECT COUNT(*) as num_rows, COUNT(DISTINCT EID) as num_eids
FROM test.ourBQtable;

这将显示表格中的行数以及EID(忽略NULL值)的不同值的数量。“

答案 1 :(得分:1)

以下两个查询是等效的,并返回相同的数字或行 - 每个唯一的EID一个

   
SELECT DISTINCT EID
FROM test.ourBQtable   

SELECT EID 
FROM test.ourBQtable 
GROUP BY EID   

这解释了为什么输出行的数量相同

现在,在第二个查询中添加了COUNT(EID)

SELECT COUNT(EID) AS Total, EID 
FROM test.ourBQtable 
GROUP BY EID   

这不会改变输出行的数量,而是在test.ourBQtable中添加相应EID的行数(如果总结所有这些计数 - 您将获得原始表中的总行数)