Comment obtenir le MIN () de deux champs dans Postgres?
-
11-07-2019 - |
Question
Disons que j'ai un tableau comme celui-ci:
name | score_a | score_b
-----+---------+--------
Joe | 100 | 24
Sam | 96 | 438
Bob | 76 | 101
... | ... | ...
Je voudrais 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 seraient bien sûr les suivants:
name | min
-----+-----
Joe | 24
Sam | 96
Bob | 76
... | ...
Cependant, lorsque j'essaie ceci dans Postgres, j'obtiens "Aucune fonction ne correspond aux types de nom et d'argument donnés. Vous devrez peut-être ajouter des conversions de types explicites. & Quot; MAX () et MIN () semblent fonctionner sur plusieurs lignes plutôt que colonnes.
Est-il possible de faire ce que je tente?
La solution
MOINS (a, b):
Les fonctions
GREATEST
etLEAST
sélectionnent la valeur la plus grande ou la plus petite dans une liste contenant un nombre quelconque 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 dans la liste sont ignorées. Le résultat sera NULL uniquement si toutes les expressions ont pour valeur NULL.Notez que
GREATEST
etLEAST
ne font pas partie du standard SQL, mais constituent une extension commune. Certaines autres bases de données leur font renvoyer NULL si l’un des arguments est NULL, plutôt que seulement lorsque tous les arguments sont NULL ...
Autres conseils
Voici le lien vers la documentation pour la fonction LEAST ()
dans PostgreSQL:
http://www.postgresql.org/docs/ current / static / functions-conditional.html # AEN15582
Vous pouvez obtenir la réponse en mettant ces données dans une colonne comme celle-ci:
SELECT name, MIN(score_a, score_b) as minimum_score
FROM table
Ici, nous plaçons la valeur minimale entre score_a
et score_b
et imprimons la même chose en stockant cette valeur dans une colonne nommée minimum_score
.