Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 带有count()和position的SQL请求_Mysql_Sql_Phpmyadmin - Fatal编程技术网

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”的正确语法