2

我目前正在尝试使用 GitHub Archive 和 BigQuery 获取前 100 个具有最大星数和少于 100 次提交的 Java 存储库。您能否为此目的提出一个查询。

我为获取 Java 语言的前 100 条记录而编写的初始查询如下:

SELECT repository_name
FROM [githubarchive:github.timeline]
WHERE repository_language = 'Java' 
AND PARSE_UTC_USEC(repository_created_at) >= PARSE_UTC_USEC('1996-01-01 00:00:00') 
AND PARSE_UTC_USEC(repository_created_at) < PARSE_UTC_USEC('2015-05-30 00:00:00') 
GROUP BY repository_name
LIMIT 100 

4

1 回答 1

2

添加一个HAVING子句以对设置条件:

SELECT repository_name
FROM [githubarchive:github.timeline]
WHERE repository_language = 'Java' 
AND PARSE_UTC_USEC(repository_created_at) BETWEEN PARSE_UTC_USEC('1996-01-01 00:00:00') AND PARSE_UTC_USEC('2015-05-30 00:00:00') 
GROUP BY repository_name
HAVING COUNT(*) < 100  -- Add this clause
ORDER BY COUNT(*) DESC -- Add this to make the LIMIT meaningful
LIMIT 100

我不知道100的是否LIMIT100最大提交计数有关。如果是这样,则不需要。如果不是(并且您实际上希望将行限制为 100),则添加一个 ORDER BY 以选择您想要100 行(而不是 100 个随机行)。

我还将日期范围条件简化为BETWEEN.


尽管以上是有效的 SQL(在 MySQL、Postgres、SQLServer 和 Oracle 中测试正常),但如果 bigquery 无法处理 order by COUNT(*)(如 OP 报告的那样),请使用子查询:

SELECT * FROM (
    SELECT repository_name, COUNT(*) commit_count
    FROM [githubarchive:github.timeline]
    WHERE repository_language = 'Java' 
    AND PARSE_UTC_USEC(repository_created_at) BETWEEN PARSE_UTC_USEC('1996-01-01 00:00:00') AND PARSE_UTC_USEC('2015-05-30 00:00:00') 
    GROUP BY repository_name
    HAVING COUNT(*) < 100
) x
ORDER BY commit_count DESC
LIMIT 100
于 2015-06-06T05:23:07.143 回答