MySQL选择前十条记录,没有重复的uid

时间:2013-03-18 14:21:47

标签: mysql sql select

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

no    uid   s
================
1       a   999
2       b    899
3       c   1234
4       a    1322
5       b    933
-----------------

uid可以重复。我需要的是显示前十条记录(需要包括uid和s),没有重复的uid顺序由s(desc)。我可以通过以下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

但它很慢

1 个答案:

答案 0 :(得分:1)

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

SELECT  uid, MAX(s) max_s
FROM    TableName
GROUP   BY uid
ORDER   BY max_s DESC
LIMIT   10

上述查询的缺点是,如果有多个uid具有相同的s并且结果是最高值,则它不会处理重复项。如果要获得具有重复的最高值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