2013-05-13 45 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