Hoe krijg ik de MIN() van twee velden in Postgres?

Stel dat ik een tabel heb zoals deze:

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

Ik wil het minimum van score_a en score_b selecteren. Met andere woorden, zoiets als:

SELECT name, MIN(score_a, score_b)
FROM table

De resultaten zouden natuurlijk zijn:

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

Als ik dit echter in Postgres probeer, krijg ik: “Geen enkele functie komt overeen met de opgegeven naam en argumenttypes. Mogelijk moet u expliciete typecasts toevoegen.” MAX() en MIN() lijken over rijente werken in plaats van over kolommen.

Is het mogelijk om te doen wat ik probeer?


Antwoord 1, autoriteit 100%

MINSTE(a, b) :

De functies GREATESTen LEASTselecteren de grootste of kleinste waarde uit een lijst met een willekeurig aantal uitdrukkingen. De expressies moeten allemaal converteerbaar zijn naar een algemeen gegevenstype, wat het type resultaat zal zijn (zie Sectie 10.5voor details). NULL-waarden in de lijst worden genegeerd. Het resultaat is alleen NULL als alle expressies NULL opleveren.

Merk op dat GREATESTen LEASTniet in de SQL-standaard staan, maar een veelvoorkomende extensie zijn. Sommige andere databases laten ze NULL retourneren als een argument NULL is, in plaats van alleen als ze allemaal NULL zijn…


Antwoord 2, autoriteit 10%

Hier is de link naar documenten voor de functie LEAST()in PostgreSQL:

http://www.postgresql.org/docs/ current/static/functions-conditional.html#AEN15582


Antwoord 3

Je kunt het antwoord krijgen door die gegevens in een kolom als deze te plaatsen:

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

Hier plaatsen we de minimumwaarde tussen score_aen score_ben drukken deze af door die waarde op te slaan in een kolom met de naam minimum_score.

Other episodes