Mysql 带有count()和position的SQL请求
我一直在寻找答案,但还没有找到任何适用于我的表格或理解的答案 我有一个名为Mysql 带有count()和position的SQL请求,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我一直在寻找答案,但还没有找到任何适用于我的表格或理解的答案 我有一个名为Vote的表格,有两个字段idVotant和idVote(idVotant是投票人,而idVote是他投票的对象) 如果我使用这个: SELECT count(idVote) FROM Vote WHERE idVote=6 SELECT idVote,count(idVote) AS votes FROM Vote GROUP BY idVote ORDER BY votes DESC SELECT * FROM (
Vote
的表格,有两个字段idVotant
和idVote
(idVotant
是投票人,而idVote
是他投票的对象)
如果我使用这个:
SELECT count(idVote) FROM Vote WHERE idVote=6
SELECT idVote,count(idVote) AS votes FROM Vote GROUP BY idVote ORDER BY votes DESC
SELECT * FROM (
SELECT @rownum:=@rownum+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
我得到了那个6号家伙得到的票数
如果我使用这个:
SELECT count(idVote) FROM Vote WHERE idVote=6
SELECT idVote,count(idVote) AS votes FROM Vote GROUP BY idVote ORDER BY votes DESC
SELECT * FROM (
SELECT @rownum:=@rownum+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
我得到了所有人的名单和他们的票数
现在,我想做的是得到每个人的位置,以及一个特定的位置。6号选手因为获得更多选票而获得第一名,2号选手获得第二名。
问一个像guy n°3这样的人的职位是什么?试试这个:
SELECT @rownum:=@rownum+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
看。我基本上已经将您的SQL查询包装在rownum
查询中
要查找特定人员,请使用以下命令:
SELECT count(idVote) FROM Vote WHERE idVote=6
SELECT idVote,count(idVote) AS votes FROM Vote GROUP BY idVote ORDER BY votes DESC
SELECT * FROM (
SELECT @rownum:=@rownum+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
尝试以下操作:
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
希望对您有所帮助。编辑:(这张是针对平局投票的)
看我的
如果你想选择具体的排名,比如排名第二,只需添加:
WHERE Ranking=2
谢谢,我刚开始就删除了u.id和u.Voces,效果很好^^^但是你能给我解释一下吗?我不明白@rownum部分和u和rand我怎样才能得到一个特定的人的位置?像添加“WHERE idVote=6”一样,我尝试过,但它不是那样工作的。@user2377713
@rownum
部分的工作原理如下:创建一个新变量rownum
,并在临时表r
中用0值初始化。然后,表r
与您现在命名为表u
的查询连接起来rownum
变量是将u
和r
的联接中的每个记录的值增加1。我接受了它,但我不能提高它,它说我需要15个声誉。#1054-where子句中的未知列“row\u number”#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在您为sql和MySQL标记的第1行中使用“idVote,count(idVote),ROW_NUMBER()OVER(按投票顺序)作为秩,count(idVote)A”的正确语法