修剪小数到2位Bigquery

时间:2017-07-26 00:52:42

标签: google-bigquery

我目前正在运行一个运行sum函数的查询,并且还将此数字除。目前我得到的值为0.0904246741698848和1.6419814808335567。我希望将这些小数修剪为小数点后的2个空格。他们的架构是浮动的。这是我的代码。谢谢您的帮助。

#standardSQL
SELECT
  Serial,
  MAX(createdAt) AS Latest_Use,
  SUM(ConnectionTime/3600) as Total_Hours,
  COUNT(DISTINCT DeviceID) AS Devices_Connected
FROM `dataworks-356fa.FirebaseArchive.Firebase_ConnectionInfo`
WHERE PeripheralType = 1 or PeripheralType = 2 or PeripheralType = 12
GROUP BY Serial
ORDER BY Latest_Use DESC

3 个答案:

答案 0 :(得分:2)

   
#standardSQL
WITH `data` AS (
  SELECT 0.0904246741698848  AS val UNION ALL
  SELECT 1.6419814808335567 
)
SELECT val, ROUND(val, 2) AS rounded_val
FROM `data`   

例如,假设您希望将其应用于Total_Hours列:

#standardSQL
SELECT
  Serial,
  MAX(createdAt) AS Latest_Use,
  ROUND(SUM(ConnectionTime/3600),2) AS Total_Hours,
  COUNT(DISTINCT DeviceID) AS Devices_Connected
FROM `dataworks-356fa.FirebaseArchive.Firebase_ConnectionInfo`
WHERE PeripheralType = 1 OR PeripheralType = 2 OR PeripheralType = 12
GROUP BY Serial
ORDER BY Latest_Use DESC

答案 1 :(得分:0)

您始终可以使用round()功能 如果您正在寻找十进制后的精度(因为使用round将四舍五入值),您可以使用substr(str(value),precision),这将在十进制后给出精确的输出。

答案 2 :(得分:0)

我发现,如果我的数据有一个像2.00这样的整数,那么舍入是有问题的,我需要所有数据反映2位小数,因为这些是最终显示的价格。无论我指定什么来回转使用ROUND,Big Query都会返回2.0。

假设您正在使用的数据永远不会超过2位小数,并且存储为STRING,则此代码将起作用(如果它的位数更多,则为每个空格的添加添加0)。

FORMAT("%.*f",2,CAST(GROSS_SALES_AMT AS FLOAT64) + .0001)