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

回到顶部