这是我的BigQuery
SELECT word,word_count,corpus_date FROM
[publicdata:samples.shakespeare]
WHERE word="the" ORDER BY word_count asc
,输出为
Row word word_count corpus_date
1 the 57 1609
2 the 106 0
3 the 287 1609
4 the 353 1594
5 the 363 0
6 the 399 1592
7 the 421 1611
我希望数据按corpus_date分组。我尝试使用corpus_date分组
SELECT word,word_count,corpus_date FROM
[publicdata:samples.shakespeare]
WHERE word="the" group by corpus_date
ORDER BY word_count asc
但它确实不允许我通过corpus_date进行分组。任何方式获取按corpus_date分组的数据
答案 0 :(得分:7)
您需要在查询中对GROUP BY中的所有非聚合值进行GROUP BY。但是,由于您只是在寻找单个单词,因此您不需要在结果集中显示甚至GROUP BY该单词(使用word =“the”子句隐式选择它。)
因此,如果您想要按日期分组的单词“the”的字数总和,您可以运行以下内容:
SELECT
SUM(word_count) as sum_for_the,
corpus_date
FROM
[publicdata:samples.shakespeare]
WHERE
word="the"
GROUP BY
corpus_date
ORDER BY
sum_for_the ASC;
这对自己来说并不是非常有用......所以如果你想做更多涉及的事情,比如学习每个日期的计数来自哪个语料库,请记下单词的计数并使用像这样的查询列出语料库:
SELECT
SUM(word_count) AS sum_for_the, corpus, corpus_date
FROM
[publicdata:samples.shakespeare]
WHERE
word="the"
GROUP BY
corpus_date, corpus
ORDER BY
sum_for_the ASC;
为了列出每年出现一个单词的所有卷,我喜欢使用GROUP_CONCAT函数。 “the”这个词出现在所有的东西中,所以它可能不像一个不常见的词那样有趣,比如“招摇”。 (这是many words invented by Shakespeare之一)。
SELECT
SUM(word_count) AS word_sum, GROUP_CONCAT(corpus) as corpora, corpus_date
FROM
[publicdata:samples.shakespeare]
WHERE
word="swagger"
GROUP BY
corpus_date ORDER BY corpus_date ASC;
更有趣的是查看每个卷和日期的单词前缀和单词的GROUP BY变体:
SELECT
word, SUM(word_count) AS word_sum, GROUP_CONCAT(corpus) as corpora, corpus_date
FROM
[publicdata:samples.shakespeare]
WHERE
word CONTAINS "swagger"
GROUP BY
word, corpus_date
ORDER BY
corpus_date ASC
IGNORE CASE;
查看BigQuery Query Language引用和BigQuery Cookbook以获取更多示例。