BigQuery SQL:保留 2 位小数的百分比

flo*_*ian 5 sql google-bigquery

在 BigQuery 标准 SQL 中,我需要将除法结果表示为保留2 位小数的百分比,例如 21.23%。我能够实现这一目标的唯一方法是执行以下操作:

  1. ROUND结果精确到小数点后两位
  2. CAST它作为一个字符串
  3. FORMAT添加百分比字符

FORMAT('%s%%', CAST(ROUND((val_1 / val_2) * 100, 2) AS STRING))

感觉像是一个解决方法...

有正确的方法吗? 首先,我想将输出保留为浮点数,而不是字符串。

谢谢!

Ale*_*aes 6

你的方法将会奏效。但是,我建议您创建一个TEMP FUNCTION。如果您要使用它几次,它将使您的代码看起来更好并且更易于阅读。

语法如下:

#standardSQL
CREATE TEMP FUNCTION NUMFORMAT(number FLOAT64) AS (
  CONCAT(REGEXP_EXTRACT(cast(number as string), r'\d*\.\d{2}'), ' %')
);
SELECT 
  NUMFORMAT(888888.999), 
  NUMFORMAT(123456.99),
  NUMFORMAT(74185.009),
  NUMFORMAT(-10.789)
Run Code Online (Sandbox Code Playgroud)

请注意,我假设您想要格式化为百分位数的数据是FLOAT64。不过,如果它不是FLOAT64,您可以在函数中更改它。输出是:

在此输入图像描述

如果您的百分位数太高,您可能还需要格式化数字的整数部分。语法如下:

#standardSQL
CREATE TEMP FUNCTION NUMFORMAT(number FLOAT64) AS (
  #CONCAT(REPLACE(REPLACE(REGEXP_REPLACE(FORMAT("%'.2f", number), r'([\d,]+).(\d+)', r'\1=\2'), ',', '.'), '=', ','),'%')
  #CONCAT(REGEXP_EXTRACT(cast(number as string), r'\d*\.\d{2}'), ' %')
  CONCAT(format("%'.2f", cast(REGEXP_EXTRACT(cast(number as string), r'\d*\.\d{2}') as float64)), '%')
  );
SELECT 
  NUMFORMAT(888888.999), 
  NUMFORMAT(123456.99),
  NUMFORMAT(74185.009),
  NUMFORMAT(-10.789)
Run Code Online (Sandbox Code Playgroud)

输出将是:

在此输入图像描述


Gor*_*off 5

没有round()做你想做的事?

SELECT ROUND((val_1 / val_2), 2)
Run Code Online (Sandbox Code Playgroud)