代码之家  ›  专栏  ›  技术社区  ›  David Leonardo Crespín

Sum函数发布PostgreSQL 9.4.5

  •  -1
  • David Leonardo Crespín  · 技术社区  · 8 年前

    我正在执行一个查询,该查询将数据库的一些值相加,列的数据类型是真实的,但它显示的结果没有小数部分,我想知道是什么问题,因为我有许多带小数的值。 查询:

    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)
    

    我明白了:

    enter image description here

    当我有这样的价值观时:

    enter image description here

    2 回复  |  直到 8 年前
        1
  •  0
  •   The Impaler    8 年前

    你的解释可能漏掉了一些东西。我刚刚在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 是的。这意味着,你是 后处理 结果。这似乎是后处理中的问题,而不是postgresql查询中的问题。

        2
  •  0
  •   David Leonardo Crespín    8 年前

    我验证了real是以小来存储我需要的值的,所以我丢失了小数位数,我必须更改数据类型。