Bedingte Ausgabe

PostgreSQL bietet die Möglichkeit, bedingte Ausgaben einfach und effizient zu implementieren. Mit Hilfe von CASE / WHEN Konstrukten können einfache Prüfungen durchgeführt werden. Das folgende Listing zeigt ein einfaches Beispiel:

test=# SELECT id, name, 
		CASE WHEN price < 10 THEN 'cheap' ELSE 'expensive' END
	FROM t_produkt;
 id |     name     |   case
----+--------------+-----------
  1 | Semmel       | cheap
  2 | Käsestangerl | cheap
  3 | Kasten       | expensive
  4 | Rose         | cheap
  5 | Apfel        | cheap
(5 rows)

CASE / WHEN Konstrukte können auch innerhalb von Aggregate Functions verwendet werden:

test=# SELECT COUNT(CASE WHEN price < 10 THEN 'cheap' ELSE 'expensive' END)
FROM t_produkt;
 count
-------
     5
(1 row)

CASE / WHEN kann auch mit GROUP BY verwendet werden:

test=# SELECT CASE WHEN price < 10 THEN 'cheap' ELSE 'expensive' END AS x,
		COUNT(*) 
	FROM t_produkt 
	GROUP BY x;
     x     | count
-----------+-------
 expensive |     1
 cheap     |     4
(2 rows)

Bei der Verwendung von GROUP BY Statements ist zu bedenken, dass man in HAVING-Clauses keine Aliase verwenden darf;

test=# SELECT CASE WHEN price < 10 THEN 'cheap' 
		ELSE 'expensive' END AS x, COUNT(*) 
	FROM t_produkt 
	GROUP BY x 
	HAVING count > 1;
ERROR:  column "count" does not exist
test=# SELECT CASE WHEN price < 10 THEN 'cheap' 
		ELSE 'expensive' END AS x, COUNT(*) 
	FROM t_produkt 
	GROUP BY x 
	HAVING (CASE WHEN price < 10 THEN 'cheap' 
		ELSE 'expensive' END) > 1;
     x     | count
-----------+-------
 expensive |     1
 cheap     |     4
(2 rows)

Um dennoch CASE / WHEN verwenden zu können, müssen Sie die entsprechenden Teile der SELECT-Clause auch in der HAVING-Clause anführen.




Cybertec Schönig & Schönig GmbH
PostgreSQL support, training, consulting
www.postgresql-support.de