Saya tahu saya harus menulis SUMdua kali, jika saya ingin menggunakannya dalam HAVINGklausa (atau menggunakan tabel turunan):
SELECT id,
sum(hours) AS totalhours
FROM mytable
GROUP BY id
HAVING sum(hours) > 50;
Pertanyaan saya sekarang adalah, apakah ini suboptimal atau tidak. Sebagai seorang programmer, permintaan ini sepertinya DB akan menghitung jumlah dua kali. Begitukah, atau haruskah saya mengandalkan optimisasi yang akan dilakukan mesin DB untuk saya?
Pembaruan: penjelasan tentang kueri yang sebanding:
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)
HAVINGklausa - tetapi, menurut pemahaman saya, secara internal ini agak dilakukan sebaliknya.
HAVING(dan kemudian menarik definisi kolom dari SELECTklausa) - untuk beberapa alasan mereka tidak melakukannya.