Redundanten SQL Code vermeiden

Oft benötigt man ein und das selbe Window mehrmals innerhalb des selben SQL Statements. Um den Code ein wenig übersichtlicher zu gestalten, kann man die Definition der Partitions in einer WINDOW Clause zusammen fassen:

test=# SELECT 	rank() OVER (w), 
		tstamp, revenue, 
		sum(revenue) OVER (w) AS total 
	FROM 	t_business 
	WHERE 	country = 'DE' 
	WINDOW 	w AS (ORDER BY tstamp) 
	ORDER BY tstamp;
 rank |   tstamp   | revenue | total 
------+------------+---------+-------
    1 | 2009-10-01 |      20 |    20
    2 | 2009-10-02 |      18 |    38
    3 | 2009-10-03 |      23 |    61
    4 | 2009-10-04 |      26 |    87
(4 rows)

In unserem Beispiel wird w an zwei Stellen im Statement verwendet. Das Statement ist so bereits viel übersichtlicher.

Es ist klarerweise auch möglich, mehr wie ein Window zu definieren:

test=# SELECT 	rank() OVER (w), 
		tstamp, revenue, 
		sum(revenue) OVER (w) AS total, 
		rank() OVER (w2) AS best_days 
	FROM 	t_business 
	WHERE 	country = 'DE' 
	WINDOW 	w AS (ORDER BY tstamp), 
		w2 AS (ORDER BY revenue) 
	ORDER BY tstamp;
 rank |   tstamp   | revenue | total | best_days 
------+------------+---------+-------+-----------
    1 | 2009-10-01 |      20 |    20 |         2
    2 | 2009-10-02 |      18 |    38 |         1
    3 | 2009-10-03 |      23 |    61 |         3
    4 | 2009-10-04 |      26 |    87 |         4
(4 rows)

In unserem Beispiel haben wir zwei Windows definiert, die an unterschiedlicher Stelle in der Query jeweils zum Einsatz kommen.




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