Wie erhalte ich die MIN () von zwei Feldern in Postgres?

140

Nehmen wir an, ich habe einen Tisch wie diesen:

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

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

SELECT name, MIN(score_a, score_b)
FROM table

Die Ergebnisse wären natürlich:

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

Wenn ich dies jedoch in Postgres versuche, wird Folgendes angezeigt: "Keine Funktion entspricht dem angegebenen Namen und den angegebenen Argumenttypen. Möglicherweise müssen Sie explizite Typumwandlungen hinzufügen." MAX () und MIN () erscheinen Arbeit über Zeilen statt Spalten.

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

Mike
quelle

Antworten:

246

MINDESTENS (a, b):

Die Funktionen GREATESTund LEASTwählen den größten oder kleinsten Wert aus einer Liste mit einer beliebigen Anzahl von Ausdrücken aus. Die Ausdrücke müssen alle in einen gemeinsamen Datentyp konvertierbar sein, der der Typ des Ergebnisses ist ( Einzelheiten siehe Abschnitt 10.5 ). NULL-Werte in der Liste werden ignoriert. Das Ergebnis ist nur dann NULL, wenn alle Ausdrücke NULL ergeben.

Beachten Sie, dass GREATESTund LEASTnicht im SQL-Standard enthalten sind, sondern eine häufige Erweiterung sind. Bei einigen anderen Datenbanken wird NULL zurückgegeben, wenn ein Argument NULL ist, und nicht nur, wenn alle NULL sind ...

Cagcowboy
quelle
20
Für Leute wie mich, die auch MAX()zwei Werte brauchen , ist es GREATEST(a, b):)
Vektor
-16

Sie können die Antwort erhalten, indem Sie diese Daten in eine Spalte wie die folgende einfügen:

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

Hier setzen wir den Mindestwert unter score_aund score_bund drucken ihn aus, indem wir diesen Wert in einer Spalte mit dem Namen speichern minimum_score.

Mohamed Aamir
quelle
nur min(expression)ist vorhanden. Definition aus dem Dokument: Mindestwert des Ausdrucks über alle Eingabewerte mit "Ausdruck" ist eine beliebige Zahl, Zeichenfolge, Datum / Uhrzeit, Netzwerk oder Aufzählungstyp oder Arrays dieser Typen
charlesdg