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