Biesterfeld: Statement flicken

Beitrag lesen

Hej,

ich hoffe hier kennt sich der ein oder andere ein bisschen mit Postgres aus. Folgendes Statement:

  
SELECT met_en,  
       sum( CASE WHEN rev THEN 1 ELSE 0 END )                     AS r,  
       sum( CASE WHEN ( NOT rev AND net < 0 ) THEN 1 ELSE 0 END ) AS e,  
       sum( CASE WHEN ( NOT rev AND net > 0 ) THEN 1 ELSE 0 END ) AS p  
  FROM st  
  WHERE net != 0  
  GROUP BY met_en  
  HAVING    ( r > 1 )  
         OR ( e > 0 AND ( r > 0 OR p > 0 ) )  
         OR ( p > 0 AND ( r > 0 OR e > 0 ) )  

Angeblich ist das Statemen fehlerhaft, weil "Spalte r unbekannt ist". Ichhab auf Anhieb aber keine Möglichkeit gefunden, anders auf die etwas aufwendigen Aggregatfunktionen zuzugreifen ohne sie in der HAVING-Klausel wieder niederzuschreiben.

Kann ich das doch irgendwie mit Aliasen machen?

Falls nicht: Würden die Aggregatfunktionen für jedes mal wo sie in HAVING erscheinen müssten erneut ausgewerted oder rafft Postgres dass das jeweils der gleiche Asudruck mit gleichem Ergebnis ist?

Beste Grüße
Biesterfeld

--
Art.1: Et es wie et es
Art.2: Et kütt wie et kütt
Art.3: Et hätt noch immer jot jejange
Das Kölsche Grundgesetz