2017-02-23 3 views
0

ich eine Abfrage haben, dieSo gruppieren Ergebnisse boolean Wert in PostgreSQL

Select bool_val 
from ..... 

Die Abfrage gibt gibt viele Zeilen mit Werten von True oder False oder gar keine Zeilen überhaupt.

Ich mag die Abfrage immer zurückkehrt True Oder False unter der Bedingung aus, dass, wenn es ein wahres das Ergebnis ist True sonst False.

Zum Beispiel: Abfrageergebnis:

False 
False 
True 
False 

True zurückkehren.

Abfrageergebnis:

False 
False 

Sollte False zurückzukehren.

Abfrageergebnis:

Sollte False zurückkehren, da die Abfrage leer ist.

Wie kann ich das mit einer Abfrage ohne IFs mit PostgreSQL tun?

Antwort

1

Sie können einen boolean Aggregat verwenden:

select bool_or(bool_val) 
from the_table; 

Um auch eine false zu erhalten, wenn die Tabelle keine Zeilen enthält, verwenden coalesce() (dank Elad)

select coalesce(bool_or(bool_val), false) 
from the_table; 

Eine weitere - möglicherweise schneller - Option ist :

select exists (select 1 from the_table where bool_val) 
+0

Es ist auch möglich, die Vereinigung zu vermeiden, wenn 'select coalesce (bool _or (bool_val), False) aus der_Tabelle ...; 'Die' Koaleszenz' wird den Fall behandeln, dass keine Zeilen zurückgegeben werden. – Elad

+0

@Elad: ah, richtig. Viel besser danke –