gpt4 book ai didi

mysql - 在 mySQL 中使用 WHERE 子句获取不正确的排名

转载 作者:行者123 更新时间:2023-11-29 05:14:21 25 4
gpt4 key购买 nike

http://sqlfiddle.com/#!9/083f5d/1

它在上述 SQL 查询中返回第 6 位而不是第 1 位。我需要在 SQL 查询中做哪些更改才能提供第一名,因为我使用 WHERE 条件检查 mpkid 和 roundpkid(WHERE mpkid=37 AND roundpkid=3)。

这里是查询:

SELECT mpkid, totalvote, rank 
FROM (
SELECT mpkid, roundpkid, totalvote,
@n := IF(@g = totalvote, @n, @n + 1) rank,
@g := totalvote
FROM tr_msearch_vote_summary,
(SELECT @n := 0) i
ORDER BY totalvote DESC
) q
WHERE mpkid=37 AND roundpkid=3

我想要的:

请先看sqlfiddle。第 3 轮只有一个记录,它是 37,所以我希望它应该显示 mpkid #37 和第 3 轮的排名 #1,但它给出排名 #6。

最佳答案

您在排名完成后应用 WHERE 条件。我猜您想在应用 WHERE 之后进行排名:

  SELECT t.mpkid, t.roundpkid,  
@n := IF(@g = t.totalvote, @n, @n + 1) rank,
@g := t.totalvote totalvote
FROM tr_msearch_vote_summary t, (SELECT @n := 0) i
WHERE t.mpkid=37 AND t.roundpkid=3
ORDER BY t.totalvote DESC

您还应该初始化@g 以确保它没有在另一个查询中预设:

  SELECT t.mpkid, t.roundpkid,  
@n := IF(@g = t.totalvote, @n, @n + 1) rank,
@g := t.totalvote totalvote
FROM tr_msearch_vote_summary t, (SELECT @n := 0, @g := NULL) i
WHERE t.mpkid=37 AND t.roundpkid=3
ORDER BY t.totalvote DESC

更新

如果你想按轮次分组排名然后简单地按 mpkid SELECT,这是一个更强大的查询:

SELECT mpkid,
roundpkid,
totalvote,
rank
FROM (
SELECT t.mpkid,
@n := CASE
WHEN @r = t.roundpkid AND @g = t.totalvote THEN @n
WHEN @r = t.roundpkid THEN @n + 1
ELSE 1
END rank,
@r := t.roundpkid roundpkid,
@g := t.totalvote totalvote
FROM tr_msearch_vote_summary t, (SELECT @n := 0, @g := NULL, @r := NULL) i
ORDER BY t.roundpkid, t.totalvote DESC
) r
WHERE mpkid = 37;

请注意,您不需要提供 roundpkid。 See updated fiddle

关于mysql - 在 mySQL 中使用 WHERE 子句获取不正确的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35202608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com