2017-05-17 20 views
0

我有這個查詢需要一個包含votes列的表,並將它們排列爲第1,2,3等。我想將排名限制在前三項,但是當我使用HAVING時,它似乎跳過偶數,或者如果我使用HAVING rank <= 6,甚至會碰到下一個數字。HAVING從別名中跳過某些號碼

SELECT `category`, 
     `year`, 
     `month`, `votes`, 
     @prev := @curr, 
     @curr := `votes`, 
     @rank := IF(@prev = @curr, @rank, @rank + @i) AS `rank`, 
     IF(@prev <> `votes`, @i:=1, @i:= @i+1) AS `counter` 
FROM `photo_contest` 
CROSS JOIN (SELECT @curr := null, @prev := null, @rank := 1, @i := 0) `tmp_tbl` 
WHERE `category` = 'World Up Close' 
    AND `year` = '2017' 
    AND `month` = 'April' 
    AND `votes` > 0 
HAVING `rank` <= 3 
ORDER BY `votes` DESC 

這可能是我們的服務器的PHP安裝的問題,因爲它採用了更古老的MySQL庫(73年5月1日),比當前正在運行的服務器(35年6月5日),但我不知道。我遇到了使用類似查詢的上一個問題。

+0

您可以嘗試使用'LIMIT 3' – mxr7350

回答

0

您可以使用HAVING以及GROUP BY。在這種情況下,您需要使用沒有HAVING的子查詢。

SELECT * 
FROM (SELECT <your query> ORDER BY `votes` DESC) as T 
WHERE rank <= 3