2016-06-13 5 views
0

Wie die median der val Spalte von Tisch bekommen test, deren Wert größer ist als 20.Abfrage für Median mit Case-Anweisung

id  val 
1   5.43 
2   106.26 
3   14.00 
4   39.58 
5   27.00 

In diesem Fall Ausgabe Median würde (27.00, 39.58, 106.26) = 39.58.

Ich verwende PostgreSQL-Datenbank. Jede Hilfe würde sehr geschätzt werden.

Antwort

0

Von PostgreSQL 9.4 Sie ordered aggregates verwenden:

postgres=# SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY val) 
       FROM foo WHERE val > 20; 
┌─────────────────┐ 
│ percentile_cont │ 
╞═════════════════╡ 
│   39.58 │ 
└─────────────────┘ 
(1 row) 

oder eine wirklich moderne Syntax:

postgres=# SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY val) 
             FILTER (WHERE val > 20) 
       FROM foo; 
┌─────────────────┐ 
│ percentile_cont │ 
╞═════════════════╡ 
│   39.58 │ 
└─────────────────┘ 
(1 row) 
+0

Vielen Dank für Ihren Kommentar. Können wir eine Abfrage schreiben, indem wir anstelle von where-Klausel 'case' verwenden? Der Grund, warum ich das frage, ist, dass ich für einige Werte "SUMME" und für einige Werte "AVG" und "MEDIAN" ausführen muss. –

+0

Ich habe das 'FILTER' Schlüsselwort, das Sie in der zweiten Abfrage verwendet haben, nicht bemerkt. Ich denke, das wird perfekt funktionieren. Danke noch einmal. –