当前位置: 首页 > 面试题库 >

MySQL替代T-SQL的WITH TIES

荀增
2023-03-14
问题内容

我有一张要从中获取前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


 类似资料:
  • 问题内容: 此示例是否有 有效的 替代SQL?我不想使用WITH … AS,这是主要标准 我读过类似的问题,但它们使用其他ddl东西,我只想要一个基本的SQL语句。 问题答案: 只需使用条件聚合: 我应该指出,将值放在单独的行上甚至更加容易:

  • 问题内容: 有没有简单的方法可以将Transact-SQL转换为MySQL? 我正在尝试转换股票代码和公司名称的数据库档案。 问题答案: 简短的回答: 否 中等答案: MAYBE 长答案: 这取决于TSQL中的内容以及要投入的时间和精力。 TSQL不是MySQL方言的子集。因此,存在一些没有MySQL转换的TSQL。但是,两种语言之间的重叠非常重要,并且在某种程度上转换只是语法问题。 这不是一个新

  • 问题内容: 我必须在MySQL中编写这样的查询: 但是MySQL不支持关键字 EXCEPT 。是否有 标准模式 可以正确使用另一个模拟MySQL中的除外的运算符? 问题答案: 您可以使用NOT IN

  • 请问,我看有些代码明明可以使用 let a = Arc<T> 的形式,但却使用的是 let a = Arc<Box<T>> 这样多包含了一层box, 请问是有什么原因?谢谢

  • 问题内容: 是否有ANSI SQL替代MYSQL LIMIT关键字? LIMIT关键字限制SELECT返回的行数,例如: 返回2行。 在前10个之后返回2行。 问题答案: 这显示了不同的方式:

  • 问题内容: 按照MySQL手册“该子句已解析,但所有存储引擎都将忽略它”。因此,我知道简单的解决方案是不可能的,但是还有另一种可行的方法来达到相同的结果吗?也许通过一些触发器或存储过程的使用?如果可以,怎么办? 同样,由于它只是“已解析”,是否还可以避免使用它,因为它没有用? 使用MySQL 5.5.11和InnoDB表 问题答案: 看看这篇有趣的文章 https://wikis.oracle.c