2009-12-13 60 views
1

我兩列在MySQL數據庫表接受拒絕選擇只值有差異大於0(不包括負數和0)

我要查詢後才能頂結果在接受,拒絕列的值

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

我只想積極和頂部的值,這裏 - = 實際上,我已經很多其他列與沿接受並reject..i只想ORDER通過差的頂部值的結果(僅適用於正)LIMIT它到1,這樣我就可以得到我想要的一排......我清楚了嗎? :) 如何寫這個查詢? 感謝..

回答

6

用途:

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 

交替使用子查詢:

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

謝謝,但我想要的是: 如果表中的所有值爲0,它不應該返回任何值.. – Sam 2009-12-13 18:28:55

+0

對不起 - 錯過了「必須高於零」部分,更正。 – 2009-12-13 18:41:37

+0

謝謝pal..worked好:) – Sam 2009-12-13 18:54:37

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

所以,如果你有這樣的價值觀:

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

查詢將只選擇第1行中

0

我假設這兩列只是從提取物你的表格,並且你希望整個行的(接受 - 拒絕)是最大的。然後,你可以做這樣的:

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

如果表中的所有值均爲0將它選擇的任何行? 我認爲它.. – Sam 2009-12-13 18:18:32