2016-03-23 4 views
1

I-Daten im folgenden Format habenAggregatfunktion bestimmten Wert zu halten, abhängig von anderen Spalten

 
id_A  id_B  val 
-------------------------------- 
1   1   1 
1   2   2 
2   1   3 
2   3   4 

Gibt es eine nette Art von ID_A zu einer Gruppe, während der Wert der Linie zu halten, wo ID_A = Id_B?

Der Grund, den ich aggregieren muss, ist, dass, wenn es keine solche Linie gibt, ich den Durchschnitt will.

Das Ergebnis sollte wie folgt aussehen:

 
id_A  val 
----------------- 
1   1 
2   3.5 

Ich habe mit der folgenden kommen, aber dieser Fall sieht hässlich und Hacky mir.

Select id_A, 
    Coalesce(
     avg(case when id_A = id_B then val else null end), 
     avg(val) 
    ) as value 
From myTable 
Group by id_A; 
+0

Ihre Abfrage sieht gut für mich und ich upvoted Sie für die Mühe. –

+0

Welche Version von postgres verwendest du? –

+0

Ich benutze Postgres 8.3, aber danke für Ihre Antwort trotzdem. – Atn

Antwort

Verwandte Themen