Tôi biết tôi phải viết SUM
hai lần, nếu tôi muốn sử dụng nó trong một HAVING
mệnh đề (hoặc sử dụng bảng dẫn xuất khác):
SELECT id,
sum(hours) AS totalhours
FROM mytable
GROUP BY id
HAVING sum(hours) > 50;
Câu hỏi của tôi bây giờ là, liệu điều này có tối ưu hay không. Là một lập trình viên, truy vấn này trông giống như DB sẽ tính tổng hai lần. Có phải vậy không, hay tôi nên dựa vào việc tối ưu hóa công cụ DB sẽ làm cho tôi?
Cập nhật: giải thích về một truy vấn có thể so sánh:
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
mệnh đề - nhưng, theo hiểu biết của tôi, bên trong điều này được thực hiện theo cách khác.
HAVING
(và sau đó kéo định nghĩa cột từ SELECT
mệnh đề) - vì một số lý do họ không làm điều đó.