Sum 函数问题 PostgreSQL 9.4.5
Sum function issue PostgreSQL 9.4.5
我正在执行一个对数据库的一些值求和的查询,列的数据类型是真实的,但它显示的结果没有小数部分,我想知道是什么问题因为我有很多带小数的值。
查询:
select extract(Month from date)||'/'|| extract(Year from date) as month_year,
sum(value) as total
from my_sum_table
where extract(Year from date) =2018 and
extract(Month from date) between 01 and 05 group by extract(Month from
date),extract(Year from date) order by extract(Month from date)
我明白了:
当我有这样的值时:
您的解释中可能遗漏了一些内容。我刚刚在 PostgreSQL 9.4 中尝试了您的查询并且运行完美:
create table my_sum_table (
date date,
value real
);
insert into my_sum_table (date, value) values ('2018-01-01', 130.59);
insert into my_sum_table (date, value) values ('2018-01-02', 256.49);
insert into my_sum_table (date, value) values ('2018-02-15', 712.57);
select extract(Month from date)||'/'|| extract(Year from date) as month_year,
trunc(sum(value::double precision)::numeric, 2) as total
from my_sum_table
where extract(Year from date) =2018 and
extract(Month from date) between 01 and 05 group by extract(Month from
date),extract(Year from date) order by extract(Month from date);
结果:
month_year total
---------------------------------------------------------------------
1/2018 387.07999
2/2018 712.57001
仅供参考,结果列 total
的类型为 float4
。
此外,您将结果月份显示为 01/2018
而不是 1/2018
。这意味着,您正在 post-processing 结果。看来问题出在 post- 处理上,而不是在 PostgreSQL 查询上。
我确认 real 太小无法存储我需要的值,所以我缺少小数位数,我必须更改数据类型。
我正在执行一个对数据库的一些值求和的查询,列的数据类型是真实的,但它显示的结果没有小数部分,我想知道是什么问题因为我有很多带小数的值。 查询:
select extract(Month from date)||'/'|| extract(Year from date) as month_year,
sum(value) as total
from my_sum_table
where extract(Year from date) =2018 and
extract(Month from date) between 01 and 05 group by extract(Month from
date),extract(Year from date) order by extract(Month from date)
我明白了:
当我有这样的值时:
您的解释中可能遗漏了一些内容。我刚刚在 PostgreSQL 9.4 中尝试了您的查询并且运行完美:
create table my_sum_table (
date date,
value real
);
insert into my_sum_table (date, value) values ('2018-01-01', 130.59);
insert into my_sum_table (date, value) values ('2018-01-02', 256.49);
insert into my_sum_table (date, value) values ('2018-02-15', 712.57);
select extract(Month from date)||'/'|| extract(Year from date) as month_year,
trunc(sum(value::double precision)::numeric, 2) as total
from my_sum_table
where extract(Year from date) =2018 and
extract(Month from date) between 01 and 05 group by extract(Month from
date),extract(Year from date) order by extract(Month from date);
结果:
month_year total
---------------------------------------------------------------------
1/2018 387.07999
2/2018 712.57001
仅供参考,结果列 total
的类型为 float4
。
此外,您将结果月份显示为 01/2018
而不是 1/2018
。这意味着,您正在 post-processing 结果。看来问题出在 post- 处理上,而不是在 PostgreSQL 查询上。
我确认 real 太小无法存储我需要的值,所以我缺少小数位数,我必须更改数据类型。