2017-01-23 75 views
1

使用大查询汇总和分析汇总,我想查询

计数(不同山坳),计数(不同山坳)以上(分区由COL2
查询都在同一个大查询的查询

但我收到一个意外的错误。

下面是查询我想要执行的模板:

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 

而且我不断收到错误:

Error: Expression 'pv_id' is not present in the GROUP BY list

没有第5列(分析计数),该查询执行时没有任何错误。

想法?

非常感谢!

+0

样本数据和预期的结果可以解释你想做的事。正如所写,该查询无效,因此它不能真正表达您的意图。 –

+0

在这里,你可以采取下面的代码,例如:
'选择 语言, 标题, COUNT(DISTINCT contirbutor_username), COUNT(DISTINCT contirbutor_username)以上( PARTITION BY 语言) FROM [BigQuery的公开数据:samples.wikipedia] GROUP BY language, title'我真正想要的是对不同维度的结果进行分组。 –

回答

1

以下应该工作,但我猜不会做你想要的:

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; 
0

尝试以下

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 

有想法 - 以上将为BigQuery StandardSQL提供“正确”不同的计数,但是在BigQuery Legacy SQL COUNT(DISTINCT)是一个统计近似值,不能保证准确。您可以使用EXACT_COUNT_DISTINCT代替

下面稍微优化版本

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