Interpolation mit SQL

Hallo Ukulele,
ich hab es getestet und mir wurde ein Fehler angezeigt. Kannst du damit was anfangen?
Parameter:
Tabelle= object_id169
Zeitstempel= TIM
Messwerte= VAL

Nein, der Fehler steht im Bild. Du aggregierst, hast dann aber nicht alle Spalten des Resultates entweder aggregiert oder gruppiert. Das ist unlogisch und ein Verstoß gegen die SQL-Spec, der ganz zurecht angemeckert wird.
 
Werbung:
Hallo akretschmer,
was meinst du mit aggregiert oder gruppiert. Sorry ich bin einabsoluter Anfänger mit SQL. Du musst mir das Step by Step erklären sonst versteh ich das nicht...
 
Hallo akretschmer,
was meinst du mit aggregiert oder gruppiert. Sorry ich bin einabsoluter Anfänger mit SQL. Du musst mir das Step by Step erklären sonst versteh ich das nicht...

Schau Dir die 2te Zeile (ganz unten) an. Wenn Du aggregierst, z.B. mit sum(), müssen alle anderen Spalten im Ergebnis entweder auch in solch einer Aggregation son, oder aber man muß nach diesen Spalten dann gruppieren (GROUP BY).

Stell Dir vor, Du hast

Code:
test=*# select * from xyz;
 a | val
---+-----
 a |  10
 a |  20
 b |  15
(3 rows)

Nun suchst Du die Durchschnitt, also avg(), von val. Das ist eine Aggregation. Was Du machst ist aber dies:

Code:
test=*# select a, avg(val) from xyz;
ERROR:  column "xyz.a" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select a, avg(val) from xyz;

Die DB kann damit nix anfangen, weil nicht klar ist, ob über alle (10,20,15) oder über a(10,20) und b(15) der Durchschnitt ermittelt werden soll. Blödes Beispiel hier grade, merk ich jetzt erst.

Also daher:

Code:
test=*# select a, avg(val) from xyz group by a;
 a |  avg
---+---------------------
 b | 15.0000000000000000
 a | 15.0000000000000000
(2 rows)
 
Ich kann mir nicht helfen aber ich sehe den Fehler nicht, als ob der Code nicht zur Fehlermeldung passt. 3 Spalten stehen im GROUP BY und die 4te t.VAL, die angemeckert wird, wird eigentlich per avg() aggregiert. Bei mir funktioniert das auch. Du kannst ja mal avg() durch sum() ersetzen und gucken, ob das läuft.
 
Werbung:
Zurück
Oben