АКТЕРЫ и ЗАМЕНА в большом запросе - PullRequest
0 голосов
/ 24 января 2019

В моей таблице в BigQuery есть столбец с именем Delivered_Cost.В нем есть "-" для строк без затрат.Я хотел бы заменить это на 0, а затем привести столбец как число с плавающей точкой, чтобы я мог выполнить с ним некоторые агрегации.Однако, когда я использую код ниже, я сталкиваюсь с проблемами.Некоторые строки изменяются на нуль, даже если они имеют значения против них.Как я могу отредактировать приведенный ниже код, чтобы я мог заменить и привести один и тот же запрос?

Код SQL

SELECT Delivered_Cost,

REPLACE (считать, 0, "не определено") в качестве Final_Consideration_Set, CAST (REPLACE (DELIVERED_COST, "-", "0") в качествеfloat) как Final_Delivered,

ОТ [таблица]

ПРЕДЕЛ 100;

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Проблема в том, что в ваших данных используется разделитель тысяч (запятая). Вы можете решить эту проблему, изменив свой запрос следующим образом (удаляя запятую):

SELECT
  delivered_cost, 
  REPLACE(Consideration_Set, '0', 'undefined') Final_Consideration_Set, 
  CAST(REPLACE(REPLACE(DELIVERED_COST, ',',''), '-', '0') AS FLOAT) Final_Delivered
FROM [table]

Кроме того, рекомендуется использовать стандартный SQL в BigQuery, а не в устаревшем. Стандартная версия SQL вашего запроса:

#standardSQL
SELECT
  delivered_cost, 
  REPLACE(Consideration_Set, '0', 'undefined') Final_Consideration_Set, 
  SAFE_CAST(REPLACE(REPLACE(DELIVERED_COST, ',',''), '-', '0') AS FLOAT64) Final_Delivered
FROM `table`
0 голосов
/ 24 января 2019

Похоже, вы используете устаревший SQL на основе ссылки на таблицу в скобках. Перейдите в «Параметры» и снимите флажок «Использовать устаревший SQL»

См. SQL, который я включил ниже. У меня это работает.

WITH table AS (
  SELECT
    '100.01' AS delivered_cost
    , 'News' AS consideration_set
  UNION ALL
  SELECT
    '-' AS delivered_cost
    , '0' AS consideration_set
)
SELECT
  delivered_cost
  , REPLACE(consideration_set, '0', 'undefined') final_consideration_set
  , SAFE_CAST(REPLACE(delivered_cost, '-', '0') AS FLOAT64) final_delivered_cost
FROM table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...