Bigquery:选择一个不包含在group by子句中的任何值的列

时间:2015-04-05 20:16:36

标签: sql google-bigquery

这是一个经典问题,我知道有很多类似于此处的工作:Select a Column in SQL not in Group By但它们不适用于我在Bigquery上的问题。

我有一张Twitter推文的表格,我想要一个网址排名,包括任何推文文字。

ID         tweet               url
1          my github tweet     http://www.github.com/xyz
2          RT github tweet     http://www.github.com/xyz
3          another tweet       http://www.twitter.com
4          more tweeting       http://www.github.com/abc

我尝试了以下查询,但之后id 1和2分别计算。

SELECT tweet, count(url) as popularity, url FROM table group by tweet, url order by popularity desc

如何正确计算/排名网址,并在结果中保留任何相关的推文文字?我不在乎它是来自ID 1还是2。

2 个答案:

答案 0 :(得分:2)

这是一种方法:

SELECT url, COUNT(*) AS popularity, GROUP_CONCAT(tweet) 
FROM Table GROUP BY url ORDER BY popularity

GROUP_CONCAT聚合函数将使用逗号作为分隔符连接与相同URL关联的所有推文(您可以选择另一个分隔符作为GROUP_CONCAT的第二个参数)。

答案 1 :(得分:0)

我不确定这是否适用于 google-bigquery ,我没有经验,但这是一个纯sql的解决方案,我认为它可能适合你。

在子查询中获取counturl,然后使用join上的表格url获取:

select t.id,t.tweet,t.url,q.popularity
from table t
join 
(SELECT url, count(url) as popularity
FROM table group by url) q
on t.url=q.url
order by q.popularity desc