2015-04-05 63 views
3

这是一个经典问题,我知道这里有很多解决方法:Select a Column in SQL not in Group By但它们不适用于我在Bigquery上的问题。Bigquery:选择一个列中的任何值都不在group by子句中

我有一张推特来自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

这里有一个办法:

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

GROUP_CONCAT聚合功能将串联使用逗号作为分隔符相同的URL相关联的所有微博(你可以选择另一种分隔符作为GROUP_CONCAT的第二个参数)。

+0

运行完美。我添加了一个left()来截断输出,我对此感到满意。 – crisscross 2015-04-06 10:51:34

+0

@crisscross万一你只需要一条推文,你也可以做SELECT URL,COUNT(*)AS流行度,MAX(鸣叫) 从表GROUP BY url ORDER BY的受欢迎程度(GROUP_CONCAT会很困难,如果有太多的推文要分组通过) – 2015-04-06 17:16:45

0

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

得到urlcount在S在子查询中,然后用表joinurl

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

非常感谢您的快速回复。它没有完全解决这个问题,但我很高兴看到有一个加入声明的选项。 – crisscross 2015-04-06 10:51:07

相关问题