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

标签 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),并且按s(desc)排序,没有重复的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 并且结果是最高的,它不会处理重复项值(value)。如果您想获得重复的最高值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

关于MySQL选择没有重复uid的前十条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15479100/

相关文章:

mysql - 使用mysql根据另一个表中的列计数更新列中的值

mysql - 需要获取公共(public)列条目的第一行,但排除具有特定列值的行

c# - 如何将变量值插入到 server 2008 表中

mysql - 删除 SELECT mysql 中的 NULL 单元格?

jquery - 在 jQuery 中,如何指定仅在特定区域执行某个功能?

mysql - 按同一分组计算 2 列

mysql - 保存 SQL 语句的结果以在别处使用

mysql - 我正在使用 Ubuntu、XAMPP、MySQL 和 Geany。使用 fopen() 时遇到问题;

mysql - SQL 中的数量偏移

SQL Server : how to remove last comma after combining rows using XML Path