2017-10-11 18 views

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.

+0

Merci. Juste appris au sujet de moins. Mais ne renverrait-il pas des zéros? Exemple: 1 2 3 0 => 0 – cs0815

+0

Bien sûr, j'ai oublié les zéros, ajouté 'NULLIF' – dnoeth

+0

OK ta. Je vais essayer demain. – cs0815

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.