Bigquery:Select 任何值不在 group by 子句中的列

Bigquery: Select a column with any value not in group by clause

这是一个经典问题,我知道这里有很多解决方法:Select a Column in SQL not in Group By 但它们不适用于我在 Bigquery 上的问题。

我有一个 table 来自 Twitter 的推文,我想要一个包含任何推文文本的 url 的排名。

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

我如何才能 count/rank 正确地 count/rank 网址并仍然在结果中保留任何相关的推文文本?我不在乎它是来自 ID 1 还是 2。

这是一种方法:

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

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

我不确定这是否适用于 google-bigquery,我没有使用过它,但这是一个纯 sql 我认为它可能适合你。

在子查询中获取 urlcount,然后 join 它与 url 上的 table:

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