Dans TeraData, existe-t-il un moyen simple de sélectionner le minimum de plusieurs colonnes (c'est-à-dire de créer une colonne calculée) tout en ignorant les colonnes contenant des zéros et des valeurs nulles?minimum de plusieurs colonnes ignorant zéro et nul
0
A
Répondre
2
Il y a une fonction LEAST
, mais il n'ignore pas NULLs, donc vous devez appliquer une logique supplémentaire comme
LEAST(COALESCE(NULLIF(col1,0), 999999)
,COALESCE(NULLIF(col2,0), 999999)
,COALESCE(NULLIF(col3,0), 999999))
Pour 99999
, vous devez utiliser une valeur plus élevée que toute existante. Si toutes les colonnes peuvent être NULL ou zéro, vous devez ajouter une finale
NULLIF(LEAST(....), 99999)
retourner NULL dans ce cas.
1
Eh bien, vous pouvez trier d'utiliser least()
:
select least(col1, col2, col3)
C'est délicat avec 0
s et NULL
s. Vous ne spécifiez pas les types de colonnes, mais vous pouvez utiliser NULLIF()
et COALESCE()
pour les valeurs numériques positives:
select least(coalesce(nullif(col1, 0), 999999999),
coalesce(nullif(col2, 0), 999999999),
coalesce(nullif(col2, 0), 999999999)
)
Bien sûr, cela retourne la valeur spéciale 999999999
si toutes les valeurs sont 0
ou NULL
.
Merci. Juste appris au sujet de moins. Mais ne renverrait-il pas des zéros? Exemple: 1 2 3 0 => 0 – cs0815
Bien sûr, j'ai oublié les zéros, ajouté 'NULLIF' – dnoeth
OK ta. Je vais essayer demain. – cs0815