Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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排名功能_Mysql_Database - Fatal编程技术网

MySQL排名功能

MySQL排名功能,mysql,database,Mysql,Database,我正在尝试使用表中的数据创建一个排名系统。它有两列,名称和分数。一个用户可以有多个分数。这就是我到目前为止所做的: ("SELECT name, score, FIND_IN_SET( score, (SELECT GROUP_CONCAT ( score ORDER BY score DESC ) FROM data )) AS rank FROM scores"); 但是这个命令列出了用户以前的所有分数,而我只需要最高的分数 有人知道我如何做到这一点吗?试试看 SELECT name, s

我正在尝试使用表中的数据创建一个排名系统。它有两列,名称和分数。一个用户可以有多个分数。这就是我到目前为止所做的:

("SELECT name, score, FIND_IN_SET( score, (SELECT GROUP_CONCAT ( score ORDER BY score DESC ) FROM data )) AS rank FROM scores");
但是这个命令列出了用户以前的所有分数,而我只需要最高的分数

有人知道我如何做到这一点吗?

试试看

SELECT name, sum(score) from scores group by name order by sum(score) desc limit 1
如果你不想求和,就用

SELECT name, max(score) from scores

您可以使用选择不同的名称、分数

然后选择TOP 1和ORDER BY

下面的查询将分别按最高分数的顺序弹出姓名列表

select name, max(score) as score from scores  group by name order by score desc

数据表的其他字段是什么?是否有<代码>名称<代码>或<代码> ID >代码> <代码>用户< /代码>?如果您愿意,请考虑以下简单的两步过程:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。与create共享表数据query@RavinderReddy是的,它有一个自动递增的每一行id和一个用户id,该用户id对于应用程序生成的每个用户都是唯一的。您提到的关于一个用户的多个分数。那么排名的商业逻辑是什么呢?如果这些信息清楚,我可能会帮助您查询。从分数中选择名称、最大(分数)是问题的正确答案。也许可以添加“按名称分组”。不管是谁否决了这一点,而不仅仅是对人们吹毛求疵,请留下评论,说明你为什么否决了这一点。