Ich weiß SUM, dass ich zweimal schreiben muss , wenn ich es in einer HAVINGKlausel verwenden möchte (oder eine abgeleitete Tabelle anderweitig verwenden möchte ):
SELECT id,
sum(hours) AS totalhours
FROM mytable
GROUP BY id
HAVING sum(hours) > 50;
Meine Frage ist nun, ob dies nicht optimal ist oder nicht. Als Programmierer sieht diese Abfrage so aus, als würde die DB die Summe zweimal berechnen. Ist das so oder sollte ich mich auf Optimierungen verlassen, die die DB-Engine für mich vornehmen wird?
Update: eine Erklärung einer vergleichbaren Abfrage:
postgres=> explain select sum(counttodo) from orderline group by orderlineid having sum(counttodo) > 100;
QUERY PLAN
--------------------------------------------------------------------
HashAggregate (cost=1.31..1.54 rows=18 width=8)
Filter: (sum(counttodo) > 100)
-> Seq Scan on orderline (cost=0.00..1.18 rows=18 width=8)
(3 rows)
HAVINGKlausel verweisen - nach meinem Verständnis erfolgt dies intern eher umgekehrt.
HAVING(und anschließendes Ziehen der Spaltendefinition) erfolgen aus der SELECTKlausel) - aus irgendeinem Grund tun sie das einfach nicht.