我有下表(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
但它很慢
答案 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