#sql #google-bigquery
#sql #google-bigquery
Вопрос:
Не могли бы вы помочь мне со следующей ситуацией в Google BigQuery? Я пытаюсь определить, есть ли отрицательные значения в столбце таблицы с именем Year (т.Е. -1999).
Я искал в Интернете по всему миру множество типов вопросов (включая StackOverflow). Из всего этого я узнал, что это можно сделать с использованием РЕГИСТРА. Итак, я написал код, который вы видите ниже.
SELECT
CASE WHEN Year <0 THEN 1 ELSE 0 END
FROM `project.dataset.datatable`
Но, к сожалению, при запуске код выдает следующую ошибку:
Нет совпадающей подписи для operator < для типов аргументов: STRING, INT64 . Поддерживаемые подписи: ЛЮБЫЕ < ЛЮБЫЕ в [2:15]
Я подумал, что это может быть связано с тем, что столбец Year определяется как СТРОКА, а не ЦЕЛОЕ ЧИСЛО. Поэтому я попытался использовать этот код для форматирования значений как INT.
SELECT
CAST(Year AS INT64) AS Year_INT
FROM `project.dataset.datatable`
Код работает, так как в нем отображаются значения. Но есть только 100 значений вместо 103, которые показывает стандартный SELECT DISTINCT. Похоже, что-то не так.
(!) Имя столбца и имя таблицы, имя набора данных и название проекта не являются реальными. Они были заменены мной для ограничения конфиденциальности.
Я хочу, чтобы запрос показывал мне все отрицательные годы, если таковые имеются. Например, если столбец Year содержит год -1999 (проблема с качеством данных), то строка должна перенести его вперед и другим подобным.
Ответ №1:
Это будет работать как ваше описание
SELECT Year
FROM `project.dataset.datatable`
WHERE CAST(Year AS INT64) < 0
Ответ №2:
Вместо приведения значения к INT вы можете напрямую искать дефис в строке:
where year like '%-%'
Это, вероятно, дешевле, чем приведение.
Комментарии:
1. Спасибо, Dnoeth! Полезно знать! 🙂
2. @dnoeth . . . Почему вы используете
'%-%'
вместо'-%'
?3. @GordonLinoff: требования к качеству данных могут также включать начальные пробелы перед дефисом (или дефис в любом другом месте)