Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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选择无重复uid的前十条记录_Mysql_Sql_Select - Fatal编程技术网

MySQL选择无重复uid的前十条记录

MySQL选择无重复uid的前十条记录,mysql,sql,select,Mysql,Sql,Select,我有下表(user_record),其中有数百万行,如下所示: no uid s ================ 1 a 999 2 b 899 3 c 1234 4 a 1322 5 b 933 ----------------- uid可以重复。我需要的是按s(desc)显示前十条记录(需要包括uid和s),没有重复的uid顺序。我可以通过以下SQL语句中的两个步骤来实现这一点: SELECT

我有下表(user_record),其中有数百万行,如下所示:

no    uid   s
================
1       a   999
2       b    899
3       c   1234
4       a    1322
5       b    933
-----------------
uid可以重复。我需要的是按s(desc)显示前十条记录(需要包括uid和s),没有重复的uid顺序。我可以通过以下SQL语句中的两个步骤来实现这一点:

SELECT distinct(uid) FROM user_record ORDER BY s DESC LIMIT 10
SELECT uid,s FROM user_record WHERE uid IN(Just Results)
我只是想知道在一个声明中有没有更有效的方法

非常感谢您的帮助

ps:我还有以下SQL语句:

 select * from(select uid,s from user_record order by s desc) as tb group by tb.uid order by tb.s desc limit 10

但是它很慢

最简单的方法是使用
MAX()
为每个
uid
获取最高的
s
,并根据最高的
s
对其进行排序

SELECT  uid, MAX(s) max_s
FROM    TableName
GROUP   BY uid
ORDER   BY max_s DESC
LIMIT   10
上面的查询的缺点是,如果有多个
uid
具有相同的
s
并且结果是最高值,则它不会处理重复项。如果要使用duplicate获得最大值
s
,可以在子查询中计算该值并将结果合并到原始表中

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  DISTINCT s
            FROM    TableName
            ORDER   BY s DESC
            LIMIT 10
        ) b ON a.s = b.s
ORDER   BY s DESC

最简单的方法是使用
MAX()
为每个
uid
获取最高的
s
,并根据最高的
s
对其进行排序

SELECT  uid, MAX(s) max_s
FROM    TableName
GROUP   BY uid
ORDER   BY max_s DESC
LIMIT   10
上面的查询的缺点是,如果有多个
uid
具有相同的
s
并且结果是最高值,则它不会处理重复项。如果要使用duplicate获得最大值
s
,可以在子查询中计算该值并将结果合并到原始表中

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  DISTINCT s
            FROM    TableName
            ORDER   BY s DESC
            LIMIT 10
        ) b ON a.s = b.s
ORDER   BY s DESC