2009-12-13 6 views
1

j'ai deux colonnes dans la table mysql db votes: acceptent et rejettentsélectionner uniquement les valeurs ayant une différence supérieure à 0 (pas de négatifs et 0)

je veux interroger uniquement le meilleur résultat après la acceptation-rejet colonne valeurs

table : votes 
================= 
accept | reject 
================= 
    7 | 9 
    5 | 1 
    2 | 15 
    5 | 1 

je veux juste la valeur positive et supérieure, ici - = En fait, je l'ai beaucoup d'autres colonnes ainsi accepter et reject..i veux juste ORDER les résultats par la valeur supérieure de différence (seulement positif) et LIMITE il à 1 pour que je puisse obtenir la rangée que je veux .. était-ce clair? :) comment écrire une requête pour cela? merci ..

Répondre

6

Utilisation:

SELECT t.accept, 
      t.reject, 
      t.accept - t.reject AS difference 
    FROM VOTES t 
    WHERE t.accept - t.reject > 0 
ORDER BY difference DESC 
    LIMIT 1 

Autre sous_requête utilisant:

SELECT v.accept, 
     v.reject 
    FROM VOTES v 
WHERE v.accept - v.reject > 0 
    JOIN (SELECT MAX(t.accept - t.reject) AS difference 
      FROM VOTES t 
     WHERE t.accept - t.reject > 0) x ON x.difference = (v.accept - v.reject) 
+0

merci mais ce que je veux est comme: si toutes les valeurs dans le tableau sont 0, il ne devrait pas retourner de valeur .. – Sam

+0

Désolé - manqué la partie "doit être au-dessus de zéro", corrigée . –

+0

merci pal..a travaillé bien :) – Sam

1
SELECT (accept - reject) as top_value FROM table WHERE (accept - reject) > 0 

Donc, si vous avez des valeurs comme ceci:

============================= 
accept | reject | top_value 
============================= 
    5 | 1 | 4 
    7 | 9 | -2 
    2 | 15 | -13 
    5 | 5 | 0 

la requête sélectionnera seulement la ligne 1.

0

Je suppose ces deux colonnes sont juste un extrait votre table, et vous voulez la ligne entière où (accepter-rejeter) est maximale. Ensuite, vous pouvez le faire comme ceci:

SELECT * FROM votes 
WHERE accept-reject = (SELECT MAX(accept-reject) FROM votes) 
LIMIT 1 
+0

si toutes les valeurs du tableau sont 0, il sera Sélectionnez une ligne? je pense qu'il le fait .. – Sam

Questions connexes