Ich weiß SUM
, dass ich zweimal schreiben muss , wenn ich es in einer HAVING
Klausel 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)
HAVING
Klausel verweisen - nach meinem Verständnis erfolgt dies intern eher umgekehrt.
HAVING
(und anschließendes Ziehen der Spaltendefinition) erfolgen aus der SELECT
Klausel) - aus irgendeinem Grund tun sie das einfach nicht.