我有一个查询,它包含一个包含votes
列的表,并将它们排在第1,第2,第3等等。我想将排名限制为前三项,但是当我使用HAVING
时,如果我使用HAVING rank <= 6
,它似乎会跳过偶数,甚至可以提升到下一个数字。
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安装的一个问题,因为它使用的是比现在运行的服务器(5.6.35)更旧的MySQL库(5.1.73),但我不确定。我使用类似的查询遇到了上一个问题的问题。
答案 0 :(得分:0)
您将HAVING
与GROUP BY
一起使用。在这种情况下,您需要使用不带HAVING
的子查询。
SELECT *
FROM ( SELECT <your query> ORDER BY `votes` DESC) as T
WHERE rank <= 3