我有一张表格,我想从中获得前N个记录。记录按值排序,一些记录具有相同的值。我想在这里做的是获得最佳N记录的列表,包括并列记录。这是在表中有什么:MySQL的T-SQL WITH TIES的替代方案
+-------+--------+
| Name | Value |
+-------+--------+
| A | 10 |
| B | 30 |
| C | 40 |
| D | 40 |
| E | 20 |
| F | 50 |
+-------+--------+
现在,如果我想获得前3名,像这样
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?我知道这可以通过子查询或临时表来完成,但我没有足够的知识来完成。我更喜欢不使用临时表的解决方案。
为了您的信息,'WITH TIES'不会做你所描述的(并且想要)。它只包含上次剪切中的关系,不会返回所有不同的(X)值。 – 2013-06-13 19:23:06