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
GREATEST
enLEAST
selecteren 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
GREATEST
enLEAST
niet 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_a
en score_b
en drukken deze af door die waarde op te slaan in een kolom met de naam minimum_score
.