2017-10-11 36 views
0

我正在第一次使用窗口函数。我有一个基本的窗口功能,我想组的结果通过媒体,我这样做时,我得到的错误:窗口函数内的基本分组

Error: SELECT list expression references totals.visits which is neither grouped nor aggregated at [1:12]

在我看来,我的第一行上总结totals.visits ,我在这里错过了什么?我希望看到访问量按国家细分的总数,例如:

VISITS   COUNTRY 
1500   United Kingdom 
750    Ireland 
etc. 

这里是我的查询:

SELECT 
     SUM(totals.visits) OVER(PARTITION BY geoNetwork.country 
           ORDER BY geoNetwork.country) AS Visits_by_Medium, 
     trafficSource.medium AS Medium 
    FROM `xxx.ga_sessions_20171010` 
    GROUP BY Medium 
+0

选择字段应该是该组中的,尝试 – MiloBellano

+0

如果我添加Visits_by_Medium到GROUP BY我得到:错误:列Visits_by_Medium包含解析函数,在GROUP BY中不允许使用[3:18] –

+0

分析函数的使用意味着您希望返回表中的每条记录,而“GROUP BY”表示您需要一个聚合。请向我们展示您的预期产出。 –

回答

1

我觉得你只是想要一个简单的GROUP BY查询:

SELECT 
    SUM(totals.visits) AS VISITS, 
    geoNetwork.country 
FROM xxx.ga_sessions_20171010 
GROUP BY 
    geoNetwork.country; 

编辑:

运行下面的查询,看看有什么总和作为窗口函数将返回:

SELECT 
    SUM(totals.visits) OVER(PARTITION BY geoNetwork.country 
          ORDER BY geoNetwork.country) AS Visits_by_Medium, 
    trafficSource.medium AS Medium 
FROM xxx.ga_sessions_20171010; 
+0

谢谢,这确实回答了这个问题,但是我试图在我的数据中探索窗口函数的用例 - 你能解释为什么SUM聚合不起作用吗? –

+0

@BenP AFAIK你的查询毫无意义。窗口函数返回表中的每一行,因此你不会在每个国家/地区获得一个记录,你会为每个国家/地区获得_every_记录。如果你真的想聚合,使用'GROUP BY',这似乎是你的用例。 –

+0

好吧,看起来我是从一个使用窗口的例子开始的。谢谢你的帮助。 –