web-dev-qa-db-fra.com

Comment obtenir le MIN () de deux champs dans Postgres?

Disons que j'ai une table comme celle-ci:

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

Je souhaite sélectionner le minimum de score_a et score_b. En d'autres termes, quelque chose comme:

SELECT name, MIN(score_a, score_b)
FROM table

Les résultats, bien sûr, seraient:

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

Cependant, lorsque j'essaye ceci dans Postgres, j'obtiens: "Aucune fonction ne correspond au nom et aux types d'arguments donnés. Vous devrez peut-être ajouter des transtypages de types explicites." MAX () et MIN () semblent fonctionner sur lignes plutôt que colonnes.

Est-il possible de faire ce que j'essaie?

114
mike

MOINS (a, b):

Les fonctions GREATEST et LEAST sélectionnent la valeur la plus grande ou la plus petite dans une liste d'un certain nombre d'expressions. Les expressions doivent toutes être convertibles en un type de données commun, qui sera le type du résultat (voir Section 10.5 pour plus de détails). Les valeurs NULL de la liste sont ignorées. Le résultat sera NULL uniquement si toutes les expressions sont évaluées à NULL.

Notez que GREATEST et LEAST ne sont pas dans la norme SQL, mais sont une extension courante. Certaines autres bases de données leur font retourner NULL si un argument est NULL, plutôt que seulement quand tous sont NULL ...

200
cagcowboy

Voici le lien vers les documents pour la fonction LEAST() dans PostgreSQL:

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

23
Bill Karwin