Saya tahu saya harus menulis SUM
dua kali, jika saya ingin menggunakannya dalam HAVING
klausa (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)
HAVING
klausa - tetapi, menurut pemahaman saya, secara internal ini agak dilakukan sebaliknya.
HAVING
(dan kemudian menarik definisi kolom dari SELECT
klausa) - untuk beberapa alasan mereka tidak melakukannya.