我试图执行以下操作:
FROM TABLE_DATE_RANGE
FLATTEN
该数据集GROUP BY
ColumnX 这是我的疑问的要点:
SELECT
r.ColumnX
,SUM(r.ColumnY)
,SUM(r.ColumnZ)
FROM
(
SELECT *
FROM FLATTEN(
(
SELECT
ColumnX
,ColumnY
,ColumnZ
FROM TABLE_DATE_RANGE(projectx.events_,
TIMESTAMP('2015-09-01'), TIMESTAMP('2015-09-08'))), my_funky_object
)
WHERE ColumnY > 10
) r
GROUP BY
r.ColumnX
问题是,我得到的行数大于ColumnX的唯一值计数。所以我退后一步,只是输出GROUP BY - COUNT的ColumnX进行调试,我得到以下输出!
我看起来像中间结果。
发生了什么,如何确保我的外部选择仅聚合ColumnX的唯一值?
答案 0 :(得分:2)
您获得了ColumnX的每个不同值的计数,但您只显示计数,而不是值。
如果您的目标是准确计算不同值的数量,请尝试以下方法:
SELECT
COUNT(*) ct
FROM (
SELECT
1
FROM
... rest of your query ...
GROUP BY r.ColumnX
)
对于ColumnX的每个不同值,该内部查询将为您提供恰好一行(每个值为1)。外部select语句将计算此类行的数量。
另一种方法是使用EXACT_COUNT_DISTINCT来获取确切的行数。这比使用GROUP BY更简单但可扩展性更低。