2009-10-15 8 views
1

J'ai une table avec la structure suivanteMySQL requête aide

 
id(int) | col1(int) | col2(int) | col3(int) 
------------------------------------------ 
1  | NULL  | 10  | 20 
2  | 5   | NULL  | 30 
3  | 8   | NULL  | NULL 

Compte tenu de la valeur « id » Je dois trouver la valeur minimale non nulle dans toutes les colonnes dans ce dossier.
Par exemple, pour id = 1, la valeur est 10. Pour id = 2, la valeur est 5 et ainsi de suite.

Comment est-ce que je fais ceci dans MySQL?

Toute aide serait grandement appréciée!

Répondre

1

MOINS() serait mieux si elle était NULL en toute sécurité, mais étant donné que ce n'est pas, c'est la solution la plus propre que je peux penser:

SELECT MIN(cols) 
    FROM (SELECT col1 
      FROM table 
     WHERE id = 1 
     UNION 
     SELECT col2 
      FROM table 
     WHERE id = 1 
     UNION col3 
      FROM table 
     WHERE id = 1) AS dt 

si vous nE ne Éd en une ligne, c'est le meilleur que je peux penser:

SELECT LEAST(COALESCE(col1, col2, col3) 
      , COALESCE(col2, col3, col1) 
      , COALESCE(col3, col1, col2)) 
    FROM table 
WHERE id = 1 
+0

L'option COALESCE deviendra effrayante avec un plus grand nombre de colonnes: P Votre première requête a enregistré ma journée. Merci :) – nano

0

Vous connaissez un moment que je les ai utilisés, mais je pense que vous pouvez utiliser MIN et MOINS fonctions de MySQL comme ceci:

SELECT MIN(LEAST(col1,col2,col3)) FROM table WHERE id=1; 
+0

Je l'avais essayé, mais de la valeur NULL 'ce rendement comme valeur minimale au lieu d'une valeur non NULL. – nano

+0

Ouais, je viens de découvrir qu'après avoir enquêté un peu plus, j'aurais probablement dû le faire avant de poster désolé! :-) – richsage

1

Donnez ce un coup:

SELECT id, LEAST(
    ifnull(ifnull(col1, col2), col3), 
    ifnull(ifnull(col2, col1), col3), 
    ifnull(ifnull(col3, col1), col2)) FROM table; 
1
SELECT LEAST(
     COALESCE(col1, col2, col3), 
     COALESCE(col2, col1, col3), 
     COALESCE(col3, col1, col2) 
     ) 
FROM mytable 

Alternativement, les variables utilisation de la session:

SELECT LEAST(
     @r := COALESCE(col1, col2, col3), 
     @r := COALESCE(@r, col2), 
     @r := COALESCE(@r, col3) 
     ) 
FROM mytable