【问题标题】:Bigquery SUM(Float_Values) returns multiple decimal places and Scientific NotationBigquery SUM(Float_Values) 返回多个小数位和科学记数法
【发布时间】:2014-01-15 15:59:10
【问题描述】:

我正在尝试计算商店的总销售额。我在名为 UNIT_PRICE 的列中有产品价格。所有价格都有 2 个小数位,例如:34.54 或 19.99 等,它们在模式中作为 type:float 导入。 (UNIT_PRICE:浮动)

当我执行选择查询时:“SELECT CompanyName, SUM(Unit_Price) as sumValue”等我在列中返回以下内容,但只有“有时”。

2.697829165015719E7

应该是这样的:26978291.65

当我将它输入电子表格然后绘制图表时,我需要它是浮点类型或至少代表正常的价格格式。

我尝试了以下方法,但仍有问题:

  • 来源:尝试将原始数据类型转换为 BigDecimal,源数据中只有 2 个小数点,然后导出到 csv 以导入 bigquery,但结果相同。
  • Bigquery:尝试先转换为字符串,然后转换为浮点数,然后再转换为 SUM,但结果相同。 "SELECT CompanyName, SUM(Float(String(Unit_Price))) as sumValue"

关于如何处理这个问题的任何想法?

谢谢

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    BigQuery 对浮点数使用默认格式,这意味着根据数字的大小,可能会使用科学记数法。 (见 %g 格式说明符here)

    我们尝试过切换,但事实证明,很难获得让每个人都满意的格式。 %f 格式化总是产生十进制格式,但也将小数填充到 6 位精度,并丢弃超过一定精度的小数。

    我提交了一个错误,允许在 BigQuery 中使用任意格式字符串转换功能。它可以让你运行SELECT FORMAT_STRING("%08d", SUM(Unit_Price)) FROM ...,以便能够控制输出的确切格式。

    【讨论】:

    • 仅供参考...此更改已于今天上午进行,因此将在下周发布。
    • 非常感谢 Jordan 和 BigQuery 团队。将对此进行测试并提供反馈。
    • 我们将更改还原为使用 %f。我已经用更多细节更新了我的答案。
    • 明白,所以我将不得不等到更新。还有其他解决方法吗?
    • 我得到:无法识别的函数 format_string 这是直播吗?
    【解决方案2】:

    您是在 BQ 浏览器工具中看到这一点,还是仅在您的电子表格中看到? BQ float 大小为 8 字节,因此它可以容纳 >9,000,000,000,000...

    我发现有时当 Excel 打开一个平面文件 (csv) 时,它会将其转换为您提到的格式。要验证是否是这种情况,请在尝试使用 excel 之前尝试使用记事本(或其他平面文件编辑器)打开 csv。

    如果这确实是问题,您可以配置 excel 连接器将此字段视为字符串而不是数字。其他选择是将其转换为字符串并将 "" 转换为数字。这样电子表格将自动将其视为字符串。之后,您可以将其转换回电子表格中的数字。 谢谢

    【讨论】:

    • 它以科学计数法显示在 BQ 浏览器中。如果我将结果下载为 csv 并在记事本或 Excel 中打开它,它会以科学记数法显示。意味着我必须做一些不理想的额外格式化。
    猜你喜欢
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多