2008-11-25 6 views
92

Lassen Sie uns sagen, dass ich eine Tabelle wie folgt aus:Wie bekomme ich die MIN() von zwei Feldern in Postgres?

name | score_a | score_b 
-----+---------+-------- 
Joe | 100 | 24 
Sam | 96 | 438 
Bob | 76 | 101 
... | ... | ... 

ich das Minimum von score_a und score_b auswählen möchten. Mit anderen Worten, so etwas wie:

SELECT name, MIN(score_a, score_b) 
FROM table 

Die Ergebnisse, natürlich wäre:

name | min 
-----+----- 
Joe | 24 
Sam | 96 
Bob | 76 
... | ... 

Allerdings, wenn ich dies in Postgres versuchen, ich werde, „keine Funktion entspricht den angegebenen Namen und Argumenttypen. Möglicherweise müssen Sie explizite Typumwandlungen hinzufügen. " MAX() und MIN() scheinen über Zeilen eher als Spalten zu funktionieren.

Ist es möglich zu tun, was ich versuche?

Antwort

148

LEAST (a, b):

Die GREATEST und LEAST Funktionen wählen Sie den größten oder kleinsten Wert aus einer Liste von einer beliebigen Anzahl von Ausdrücken. Die Ausdrücke müssen alle in einen gemeinsamen Datentyp konvertierbar sein. Dies ist der Typ des Ergebnisses (Details siehe Section 10.5). NULL-Werte in der Liste werden ignoriert. Das Ergebnis ist NULL, wenn alle Ausdrücke NULL ergeben.

Beachten Sie, dass GREATEST und LEAST sind nicht in dem SQL-Standard, ist aber eine gemeinsame Erweiterung. Einige andere Datenbanken machen sie NULL zurück, wenn ein Argument NULL ist, und nicht nur dann, wenn alle NULL sind ...

+10

Für Leute wie mich, die auch 'MAX()' von zwei Werten benötigen, ist es 'GREATEST (a, b)' :) – vektor

-4

Sie können die Antwort erhalten, indem diese Daten in einer Spalte wie folgt setzen:

SELECT name, MIN(score_a, score_b) as minimum_score 
FROM table 

Hier werden wir den Minimalwert unter score_a setzen und score_b und drucken Sie denselben, indem Sie diesen Wert in einer Spalte mit dem Namen minimum_score speichern.