Я анализирую данные желтых поездок в Нью-Йорк на такси автомобили 2018 года. (Вам нужен аккаунт Google BigQuery для доступа к этому набору данных.)
Схема говорит, что большинство столбцов являются числовыми. Однако, когда я попытался вычислить сумму ключевых долларовых значений (tip_amount, tolls_amount, total_amount), я получил сообщение об ошибке, в котором говорится, что они являются строковыми переменными.
SELECT sum(total_amount)
FROM [bigquery-public-data:new_york_taxi_trips.tlc_yellow_trips_2018]
WHERE month(dropoff_datetime) = 12
Error: Field total_amount is of type STRING which is not supported for SUM
Затем я попытался использовать функцию cast () для преобразования ее в числовую переменную, но это не сработало.
SELECT sum(total_amount_numeric) FROM
(
SELECT cast(total_amount as numeric) as total_amount_numeric
FROM [bigquery-public-data:new_york_taxi_trips.tlc_yellow_trips_2018]
WHERE month(dropoff_datetime) = 12
)
Error: Field total_amount_numeric is of type STRING which is not supported for SUM
Как я могу анализировать эти числовые переменные, как я предполагал, вместо строковых переменных, поскольку они ошибочно установлены в базе данных?
2 ответа
Ниже приведен стандартный SQL BigQuery.
#standardSQL
SELECT SUM(total_amount)
FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018`
WHERE EXTRACT(MONTH FROM dropoff_datetime) = 12
Проблема, с которой вы столкнулись, заключается в том, что тип данных NUMERIC не поддерживается устаревшим SQL BigQuery, а скорее обрабатывается как STRING и не может CAST ни FLOAT, ни INTEGER.
Итак, обходной путь заключается в использовании стандартного SQL BigQuery, как в приведенном выше примере - и, как вы видите здесь, вам не нужно выполнять какие-либо CAST'ы, так как это поле уже NUMERIC
Ваш запрос будет выполняться следующим образом в стандартном SQL:
SELECT sum(total_amount_numeric)
FROM (SELECT cast(total_amount as numeric) as total_amount_numeric
FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018`
WHERE EXTRACT(month FROM dropoff_datetime) = 12
) x;
Вы можете включить эту подсказку перед запросом, чтобы убедиться, что он выполняется с использованием стандартного SQL:
#standardSQL
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.