2008-11-25 6 views
92

Disons que j'ai une table comme ceci:Comment obtenir le MIN() de deux champs dans Postgres?

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

J'aimerais choisir le minimum 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, serait:

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

Cependant, lorsque je tente cela dans Postgres, je reçois, « Aucune fonction correspond au nom donné et types d'arguments Vous devrez peut-être ajouter des types de types explicites. " MAX() et MIN() semblent fonctionner sur lignes plutôt que sur colonnes.

Est-il possible de faire ce que je tente?

Répondre

148

LEAST (a, b):

Les GREATEST et LEAST fonctions sélectionner la plus grande ou plus petite valeur à partir d'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 seulement si toutes les expressions évaluent à NULL.

Notez que GREATEST et LEAST ne sont pas dans la norme SQL, mais sont une extension commune. D'autres bases de données qu'elles retournent NULL si l'argument est NULL, plutôt que lorsque tous sont NULL ...

+10

Pour les personnes comme moi qui auront aussi besoin de 'MAX()' de deux valeurs, c'est 'GREATEST (a, b)' :) – vektor

-4

vous pouvez obtenir la réponse en mettant ces données dans une colonne comme ceci:

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

ici, nous mettons la valeur minimale entre score_a et score_b et en imprimant la même chose en stockant cette valeur dans une colonne nommée minimum_score.

Questions connexes