2009-12-13 2 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 

Alternate с помощью подзапросов:

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

+0

Извините - пропущена часть «должна быть выше нуля», исправлена , –

+0

спасибо pal..worked fine :) – Sam

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

Я предполагаю, что эти два столбца лишь выписка из вашей таблицы, и вы хотите, чтобы вся строка, где (accept-reject) является максимальной. После этого вы можете сделать это следующим образом:

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

, если все значения в таблице 0 он будет выбрать любую строку? Я думаю, что он делает. – Sam

Смежные вопросы