Sql 在同一个大查询上同时查询聚合和分析聚合
使用大查询,我正在尝试查询Sql 在同一个大查询上同时查询聚合和分析聚合,sql,google-bigquery,Sql,Google Bigquery,使用大查询,我正在尝试查询 计数(不同列),计数(不同列)超过(按列2划分) 但我收到了一个意外的错误 以下是我尝试执行的查询的模板: SELECT country, partner, segment_id, COUNT(DISTINCT pv_id) pvs, COUNT(DISTINCT pv_id) over(PARTITION BY country) country_total_pvs F
计数(不同列),计数(不同列)超过(按列2划分)
但我收到了一个意外的错误 以下是我尝试执行的查询的模板:
SELECT
country,
partner,
segment_id,
COUNT(DISTINCT pv_id) pvs,
COUNT(DISTINCT pv_id) over(PARTITION BY country) country_total_pvs
FROM (...)
GROUP BY
country,
partner,
segment_id
而我一直得到的错误是:
错误:GROUP BY列表中不存在表达式“pv_id”
如果没有第5列(分析计数),则执行查询时不会出现任何错误
想法
非常感谢 以下方法应该有效,但我猜这并不能满足您的要求:
SELECT country, partner, segment_id,
COUNT(DISTINCT pv_id) pvs,
SUM(COUNT(DISTINCT pv_id)) OVER (PARTITION BY country) as country_total_pvs
FROM (...) q
GROUP BY country, partner, segment_id;
相反:
SELECT country, partner, segment_id,
COUNT(DISTINCT pv_id) pvs,
country_total_pvs
FROM (SELECT q.*,
COUNT(DISTINCT pv_id) OVER (PARTITION BY country) as country_total_pvs
FROM (...) q
) q
GROUP BY country, partner, segment_id, country_total_pvs;
试试下面
SELECT
a.country AS country,
partner,
segment_id,
COUNT(DISTINCT pv_id) pvs,
country_total_pvs
FROM youTable AS a
LEFT JOIN (
SELECT country, COUNT(DISTINCT pv_id) country_total_pvs
FROM youTable GROUP BY country
) AS b
ON a.country = b.country
GROUP BY
country,
partner,
segment_id,
country_total_pvs
请记住-以上将为BigQueryStandardSQL提供“正确”的不同计数,但在BigQueryLegacy中,SQL是一种统计近似值,不能保证精确。您可以使用
下面是稍微优化的版本
SELECT
a.country AS country,
partner,
segment_id,
pvs,
country_total_pvs
FROM (
SELECT
country,
partner,
segment_id,
COUNT(DISTINCT pv_id) pvs
FROM youTable
GROUP BY country, partner, segment_id
) AS a
LEFT JOIN (
SELECT country,
COUNT(DISTINCT pv_id) country_total_pvs
FROM youTable GROUP BY country
) AS b
ON a.country = b.country
样本数据和期望的结果将解释您想要做什么。如前所述,该查询无效,因此无法真正传达您的意图。在这里,您可以使用以下代码作为示例:
从[bigquery公共数据:samples.wikipedia]按语言分组中选择语言、标题、计数(DISTINCT contirbutor_用户名)、计数(DISTINCT contirbutor_用户名)(按语言分区),title
我真正想要的是不同维度的分组结果。