MySQL替代T-SQL的WITH TIES
我有一张要从中获取前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
以上是 MySQL替代T-SQL的WITH TIES 的全部内容, 来源链接: utcz.com/qa/410607.html