2017-05-17 17 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