【问题标题】:postgresql coalescePostgreSQL 合并
【发布时间】:2012-08-19 10:06:57
【问题描述】:

谁能说出为什么这个选择返回 3.0 而不是 3.5:

SELECT coalesce(1.0*(7/2),0) as foo

这个返回3:

SELECT coalesce(7/2,0) as foo

我只是想将 SUM 除以 COUNT 以求平均值。如果我有结果,我需要它 0 如果 null 和 1 四舍五入,以防我有结果。

【问题讨论】:

  • 无法访问 postgres,但请尝试 coalesce(7/2,0.0) 看看是否有任何改变。鬼鬼祟祟地怀疑它可能会强加 int 输出,因为 0 是一个 int。

标签: postgresql


【解决方案1】:

嗯,7/2 is an integer1.0 is numeric,等等1.0*(7/2)==1.0 * 3 == 3.0

【讨论】:

  • sooo...我如何从中获得 3.5 我仍然不确定。
  • 你会把那个查询结果提交给你的老板吗? :) 您刚刚复制了 3.0 而不是 3.5,这是正确的结果。我读到了division (integer division truncates the result),但是在这种情况下如何获得正确的除法结果?杰克请提交你的答案。这是正确的。
  • 0_o “正确的结果”是什么意思? PostgreSQL 有整数除法。其他语言没有。如果需要浮点除法,请适当转换。
  • @GigiContra - “你会把查询结果提交给你的老板”是什么意思?
【解决方案2】:

您需要执行以下操作:

SELECT COALESCE((1.0 * 7)/2, 0) AS foo;

【讨论】:

    【解决方案3】:

    这样感觉好多了:

    select 7.0/2.0;
    --------------------
     3.5000000000000000
    

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2015-02-25
      • 1970-01-01
      • 2012-02-28
      • 2012-11-16
      • 2017-11-17
      • 2015-02-02
      • 2010-10-02
      • 2018-12-23
      相关资源
      最近更新 更多