MySQL选择无重复uid的前十条记录
我有下表(user_record),其中有数百万行,如下所示: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
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