我有一张要从中获取前N条记录的表。记录按值排序,某些记录具有相同的值。我想在这里做的是获取前N条记录的列表,包括并列记录。这是表中的内容:
+-------+--------+ | Name | Value | +-------+--------+ | A | 10 | | B | 30 | | C | 40 | | D | 40 | | E | 20 | | F | 50 | +-------+--------+
现在,如果我想获得像这样的前三名
SELECT * FROM table ORDER BY Value DESC LIMIT 3
我得到这个:
+-------+--------+ | Name | Value | +-------+--------+ | F | 50 | | C | 40 | | D | 40 | +-------+--------+
我想得到的是这个
+-------+--------+ | Name | Value | +-------+--------+ | F | 50 | | C | 40 | | D | 40 | | B | 30 | +-------+--------+
我计算每条记录的排名,因此我真正想要的是获得前N个排名记录,而不是按值排序的前N个记录。这是我如何计算排名:
SELECT Value AS Val, (SELECT COUNT(DISTINCT(Value))+1 FROM table WHERE Value > Val) as Rank
在T-SQL中,通过执行以下操作可以实现以下目的:
SELECT TOP 3 FROM table ORDER BY Value WITH TIES
有谁知道如何在MySQL中执行此操作?我知道可以使用子查询或临时表来完成此操作,但我没有足够的知识来完成此操作。我希望不使用临时表的解决方案。
这对您有用吗?
select Name, Value from table where Value in ( select distinct Value from table order by Value desc limit 3 ) order by Value desc
也许:
select a.Name, a.Value from table a join (select distinct Value from table order by Value desc limit 3) b on a.Value = b.Value