Laufzeit-Wunder

Du hast 4 Spalten im Result, davon eine aggregiert. Daher müssen 3 im GROUP BY sein, da ist aber nur eine.

Code:
postgres=# with my_table as (select 1 as a, 2 as b, 3 as c) select a, b, sum(c) from my_table group by a;
ERROR:  column "my_table.b" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...able as (select 1 as a, 2 as b, 3 as c) select a, b, sum(c) ...
                                                             ^
postgres=#

Update auf eine halbwegs vom alter her nicht stinkende Version von MySQL und Du wirst einen ähnlichen Fehler bekommen.
 
Werbung:
Jetzt habe ich den Query versucht schöner zu machen:
select s.Zeitpunkt, s.Wert, v1.Zeitpunkt_GMT, sum(v2.Verbrauch) from haus.strom as s inner join haus.Strom_Verbrauch as v1 on v1.Zeitpunkt_GMT = s.Zeitpunkt_GMT inner join haus.Strom_Verbrauch as v2 on v2.Zeitpunkt_GMT <= v1.Zeitpunkt_GMT where s.Zeitpunkt >= now() - interval 1 hour and s.OBIS = '1-0:1.8.0*255' group by s.Zeitpunkt, s.Wert, v1.Zeitpunkt_GMT having sum(v2.Verbrauch) <> s.Wert

Die Erweiterung des GROUP BY kostet zusätzlich 1 Sekunde. Aber stimmt schon - das hätte die Datenbank erkennen müssen.

Den ursprünglichen Query habe ich auch umgebaut auf INNER JOIN. Das hatte aber keine positive Auswirkung (keine Benutzen eines Index).
 
Werbung:
Die Erweiterung des GROUP BY kostet zusätzlich 1 Sekunde. Aber stimmt schon - das hätte die Datenbank erkennen müssen.
Na, die Sekunde nimmt man doch gern in Kauf, wenn dafür das Ergebnis garantiert richtig ist!
Und hätte, hätte, Fahrradkette ....
diese Problem geistert seit Jahren - oder Decaden?- in den mysql Foren rum und ist natürlich auch beim Hersteller bekannt. Es gibt (mittlerweile) Schalter, die es entschärfen. Der Standard war so, dass die DB einfach mal rät, wie das Group By laufen soll, wenn unpräzise Angaben im Statement stehen. Und klar, man würde sich wünschen, dass sie richtig rät und so unklare Formulierungen des Entwicklers intern zu korrigieren. Warum das niemand interessiert und so viele Entwickler sich mit diesem Sch.. rumplagen, ist mir ein Rätsel.
 
Zurück
Oben