这是一个经典问题,我知道有很多类似于此处的工作: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。
答案 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的解决方案,我认为它可能适合你。
在子查询中获取count
个url
,然后使用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