Pad*_*mez 2 sql postgresql rounding
我试图在 select 语句中划分两列,然后将商四舍五入到小数点后 4 位。
select round(round(sum(case when acct_no = '2999'
and date between '1/1/14' and current_date then amount end)::numeric, 4)::float
/ round(sum(case when acct_no = '3989'
and date between '1/1/14' and current_date then amount end)::numeric, 4)::numeric, 4) column
from table
Run Code Online (Sandbox Code Playgroud)
查询的其余部分将保存多个日期,因此其中的日期应该是必要的。
它给出的错误:
错误:函数 round(双精度,整数)不存在
这是在 PostgreSQL 中尝试过的。
SELECT round((
sum(CASE WHEN acct_no = '2999'
AND thedate between '2014-1-1' AND current_date THEN amount END)
/ sum(CASE WHEN acct_no = '3989'
AND thedate between '2014-1-1' AND current_date THEN amount END)
)::numeric, 4) AS result
FROM tbl;
Run Code Online (Sandbox Code Playgroud)
Postgres 中没有为浮点类型round()添加精度修饰符的函数。根据文档numeric,仅适用于。
浮点数除以( )numeric的结果。测试:double precisionfloat8
SELECT 5::float/3::numeric -- result is double precision
Run Code Online (Sandbox Code Playgroud)
计算结束时舍入一次。这样更快、更准确。
切勿用作date列名称。它是标准 SQL 中的保留字,也是 Postgres 中的基本类型。
最好在代码中的日期文字中使用推荐的 ISO 8601 日期格式。无论设置和区域设置如何,这都有效,而您的本地格式会因不同的设置而中断。
如果不是rest of the query你提到的,这可以进一步简化:
SELECT 5::float/3::numeric -- result is double precision
Run Code Online (Sandbox Code Playgroud)
NULLIF()最后,这还捕获了除数上使用的“除以 0”异常。
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |