Je sais que je dois écrire SUM
deux fois, si je souhaite l'utiliser dans une HAVING
clause (ou utiliser une table dérivée sinon):
SELECT id,
sum(hours) AS totalhours
FROM mytable
GROUP BY id
HAVING sum(hours) > 50;
Ma question est maintenant de savoir si ce n'est pas optimal ou non. En tant que programmeur, cette requête ressemble à la base de données va calculer la somme deux fois. Est-ce le cas, ou devrais-je compter sur des optimisations que le moteur DB fera pour moi?
Mise à jour: explication d'une requête comparable:
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
clause - mais, à ma connaissance, en interne, cela se fait plutôt dans l'autre sens.
HAVING
(puis en tirant la définition de la colonne de la SELECT
clause) - pour une raison quelconque, ils ne le font tout simplement pas.