Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在同一个大查询上同时查询聚合和分析聚合_Sql_Google Bigquery - Fatal编程技术网

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
我真正想要的是不同维度的分组结果。