Я хотел бы найти общее количество слов данного слова в общедоступной базе данных BigQuery по «Шекспир» (в разделе «Примеры -> Шекспир», также известный как bigquery-public-data.samples.shakespeare
).
Схема выглядит следующим образом:
Field name | Type | Mode | Description
---------------------------------------------------
word | STRING | REQUIRED | A single unique word (where whitespace is the delimiter) extracted from a corpus.
word_count | INTEGER | REQUIRED | The number of times this word appears in this corpus.
corpus | STRING | REQUIRED | The work from which this word was extracted.
corpus_date| INTEGER | REQUIRED | The year in which this corpus was published.
Я успешно объединил все слова в нижнем регистре для всех значений corpus
, а затем объединил все corpus
экземпляров в новый столбец found_in
, а также SUM
подсчитал их слова в столбце total_word_count
.
Мой запрос выглядит так:
SELECT
STRING_AGG(DISTINCT corpus) AS found_in,
LOWER(word),
SUM(word_count) AS total_word_count
FROM
`bigquery-public-data.samples.shakespeare`
GROUP BY
LOWER(word)
ORDER BY
total_word_count DESC
LIMIT
1000
Выходные столбцы:
Row found_in f0_ total_word_count
Моя проблема переименовывает столбец f0_
. Это проблема, потому что я хотел бы обернуть все это в другой запрос, чтобы я мог сделать что-то вроде SELECT * FROM {{that previous query}} WHERE word="thou"
.
Чего я не понимаю, так это
Как ссылаться на слово в моем предложении WHERE
.
Как назвать часть LOWER(word)
моего основного запроса, как я делал для STRING_AGG
и (SUM) (используя AS
).
Я попробовал следующее:
SELECT
*
FROM
(
SELECT
STRING_AGG(DISTINCT corpus) AS found_in,
LOWER(word),
SUM(word_count) AS total_word_count
FROM
`bigquery-public-data.samples.shakespeare`
GROUP BY
LOWER(word)
ORDER BY
total_word_count DESC
LIMIT
1000
)
WHERE word = 'thou'
Однако в последней строке я получил ошибку: Unrecognized name: word
.
Итак, я попытался использовать AS
:
SELECT
*
FROM
(
SELECT
STRING_AGG(DISTINCT corpus) AS found_in,
LOWER(word) AS lowered_word,
SUM(word_count) AS total_word_count
FROM
`bigquery-public-data.samples.shakespeare`
GROUP BY
LOWER(word)
ORDER BY
total_word_count DESC
LIMIT
1000
)
WHERE word = 'and'
Но тогда я получил ошибку SELECT list expression references column word which is neither grouped nor aggregated
, на линии с LOWER(word)
.
Это смущает меня, потому что я вижу word
, на который ссылается GROUP BY
.
Как правильно ссылаться на LOWER (слово), чтобы ссылаться на него во вторичном запросе?