2010-07-11 7 views
2

Je voudrais savoir si je peux tester une certaine valeur par rapport à une condition dans chaque ligne retournée d'une manière ou d'une autre dans la requête?SQL - condition sur la valeur du champ?

.: Je par exemple avoir des colonnes:

X Y Z 
-1 1 2 
2 2 -1 
3 -1 3 

Je veux utiliser avg() pour toutes les valeurs sauf pour -1. Je ne peux pas utiliser où <> -1 car chaque ligne le contient une fois.

+0

l'action à entreprendre une valeur telle que -2? –

+0

C'était une faute de frappe, désolé. – Thomas

+0

Quelle base de données utilisez-vous? –

Répondre

2

Utilisez WHERE pour filtrer les valeurs loin que vous ne voulez pas inclure dans votre moyenne, par exemple, pour inclure tous les numéros dans la moyenne, sauf pour -1:

SELECT 
    (SELECT AVG(x) FROM table1 WHERE x >= 0) AS x, 
    (SELECT AVG(y) FROM table1 WHERE y >= 0) AS y, 
    (SELECT AVG(z) FROM table1 WHERE z >= 0) AS z 

Notez que si vous vraiment vouloir inclure tous les nombres sauf -1 comme vous l'avez dit dans votre question, alors vous devriez changer la clause WHERE à x <> -1 mais je doute que c'est ce que vous voulez.

2

les opérations suivantes:

SELECT AVG(IF(x <> -1, x, NULL)) AS avgX, 
     AVG(IF(y <> -1, y, NULL)) AS avgY, 
     AVG(IF(z <> -1, x, NULL)) AS avgZ 
FROM mytable; 
+0

Cela pourrait être mieux avec 'x <> -1', etc., car votre requête actuelle n'autorise que les valeurs supérieures à zéro. – Mike

Questions connexes