2013-05-13 18 views
0

我一直在寻找答案,但还没有找到任何可以应用到我的表或理解的东西。带count()和位置的SQL请求

我有一个与2场idVotantidVoteidVotant是谁在表决的家伙,idVote是他投谁的家伙)

如果我用这个叫Vote表:

SELECT count(idVote) FROM Vote WHERE idVote=6 

我得到了第6名收到的选手的票数。

如果我用这个:

SELECT idVote,count(idVote) AS votes FROM Vote GROUP BY idVote ORDER BY votes DESC 

我得到的所有的人的名单,他们有票的数量。

现在,我想要做的是获得每个家伙的位置,以及具体的位置。
第6名的家伙首先是因为他得到了更多的选票,第二名的家伙是第二名。
并问一个像什么位置是男人n°3的家伙的位置?

回答

0

试试这个:

SELECT @rownum:[email protected]+1 AS position, u.idVote, u.votes 
FROM (
    SELECT idVote, count(idVote) AS votes FROM Vote GROUP BY idVote ORDER BY votes DESC 
) u, 
(SELECT @rownum:=0) r 

demo here。我已经基本包裹rownum查询

内您的SQL查询要找到一个特定的人,用这个:

SELECT * FROM (
    SELECT @rownum:[email protected]+1 AS position, u.idVote, u.votes 
    FROM (
    SELECT idVote, count(idVote) AS votes FROM Vote GROUP BY idVote ORDER BY votes DESC 
) u, 
    (SELECT @rownum:=0) r 
) ranked_vote WHERE idVote=6 
+0

谢谢,我刚刚在开始时删除了u.id和u.votes,并且它运行良好^^但感冒时请给我解释一下?我不明白@rownum部分和u和r – Syri 2013-05-13 12:49:53

+0

,我该如何获得特定人物的位置?像添加“WHERE idVote = 6”我尝试过,但它不起作用。 – Syri 2013-05-13 12:58:19

+0

真棒,它真的很好,非常感谢^^ – Syri 2013-05-13 13:06:44

0

尝试以下:

SELECT idVote,count(idVote) AS votes,ROW_NUMBER() OVER (ORDER BY count(idVote) desc) AS Rank 
     FROM Vote 
     GROUP BY idVote 
     ORDER BY count(idVote) 
     DESC 

SQLFIDDLE

希望其很有帮助。

+0

#1064 - 您的SQL语法错误;请检查与您的MySQL服务器版本相对应的手册,以便在第1行 – Syri 2013-05-13 12:56:04

+0

附近使用'idVote,count(idVote),ROW_NUMBER()OVER(ORDER BY votes)AS等级,count(idVote)A'为sql和mysql – Freelancer 2013-05-13 12:57:03

+0

通过我的工作sqlfiddle演示 – Freelancer 2013-05-13 13:00:17

0

编辑:(这个地址领带票)

SELECT * FROM 
    (SELECT idVote, Votes, CASE 
     WHEN @totalvotes = Votes THEN @rank 
     ELSE @rank := @rank + 1 
     END AS Ranking, @totalvotes := Votes FROM 
     (SELECT idVote, count(*) as Votes 
     FROM Vote 
     GROUP BY idVote ORDER BY Votes DESC) V 
    JOIN (SELECT @rank:=0) r) VoteRanking 

见我SQLFiddle

如果你想选择特定的排名让我们说列第二位只需添加:

WHERE Ranking=2 
+0

#1054 - 'where子句'中的未知列'row_number' – Syri 2013-05-13 12:54:36