round(sum), x) Problem

Eben ist mir ein weiteres Problem aufgefallen. Wenn ich versuche über:

SELECT round(sum(bedarf2050), 4)

eine aggregiert Summe auf vier Nachkommastellen zu runden gibt das php-Skript nichts und pgAdminIII die Fehlermeldung “function round(double precision, integer) does not exist” aus.

Benutze ich die Funktion jedoch ohne Dezimalanzeiger oder ohne Summenformel funtioniert sie tadellos:

SELECT round(640746.475637546, 4)

SELECT round(sum(bedarf2050))

liefern beide wie gewünscht die entsprechenden Ergebnisse.

Sobald aber die Summenfunktion mit einer Nachkommastelle versehen wird, geht nix mehr.

round(dp or numeric)

Also, round erwartet bestimmte Datentypen. Deine Spalte hat einen anderen.

Nee, das ist es eben nicht. Die Spalte bedarf2050 hat den Datentyp double precision. Wenn es nicht so wäre würde ja auch

round(sum(bedarf2050))

nicht funktionieren. Funktioniert aber. Sobald ich aber “, x” für eine Dezimalstelle ranhänge kommt die Fehlermeldung. Das ist irgendein seltsamer Effekt. Woher und weshalb, keine Ahnung.

round(dp or numeric) (same as input) round to nearest integer round(42.4) 42
round(v numeric, s int) numeric round to s decimal places round(42.4382, 2) 42.44

test=*> create table nunatak(bedarf2050 double precision);
CREATE TABLE
test=*> insert into nunatak values (10);
INSERT 0 1
test=*> select round(sum(bedarf2050)) from nunatak ;
 round
-------
    10
(1 row)

test=*> insert into nunatak values (10.123456);
INSERT 0 1
test=*> select round(sum(bedarf2050)) from nunatak ;
 round
-------
    20
(1 row)

test=*> select round(sum(bedarf2050),4) from nunatak ;
ERROR:  function round(double precision, integer) does not exist
LINE 1: select round(sum(bedarf2050),4) from nunatak ;
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
test=*> select round(sum(bedarf2050)::numeric,4) from nunatak ;
  round
---------
 20.1235
(1 row)

Ah, super! Danke für den Hinweis. Mit dieser Schreibweise:

select round(sum(bedarf2050)::numeric,4) from nunatak ;

funktioniert es wunderbar!