【发布时间】:2010-04-06 05:31:54
【问题描述】:
在一次采访中,我被要求编写一个 SQL 查询,该查询从表中的某个列中获取前三个具有最高值的记录。我编写了一个查询,它获取了所有具有最高值的记录,但我不知道我如何才能只获取前三个记录。
你能帮帮我吗?
谢谢。
【问题讨论】:
在一次采访中,我被要求编写一个 SQL 查询,该查询从表中的某个列中获取前三个具有最高值的记录。我编写了一个查询,它获取了所有具有最高值的记录,但我不知道我如何才能只获取前三个记录。
你能帮帮我吗?
谢谢。
【问题讨论】:
SELECT TOP 3 * FROM Table ORDER BY FieldName DESC
来自here,但可能有点过时了:
Postgresql:
SELECT * FROM Table ORDER BY FieldName DESC LIMIT 3
MS SQL 服务器:
SELECT TOP 3 * FROM Table ORDER BY FieldName DESC
mySQL:
SELECT * FROM Table ORDER BY FieldName DESC LIMIT 3
【讨论】:
SELECT R.* FROM (SELECT * FROM SomeTable ORDER by FieldName DESC)R WHERE rownum < 4 将为您解决问题。当然,还有一个方法涉及LEAD, LAGOracle Analytical 函数,这里就不赘述了。
选择前 3 名....
【讨论】:
取决于数据库引擎,或者
select top 3 * from table order by column desc
或
select * from table order by column desc limit 3
【讨论】:
TOP 3 的语法因数据库而异。
很遗憾,您需要使用这些结构才能获得最佳性能。 像 Hibernate 这样的库在这里可以提供帮助,因为它们可以将通用 API 转换为各种 SQL 方言。
由于您询问的是 Java,因此可以只从数据库中选择所有内容(使用 ORDER BY),但只获取前三行。根据查询需要如何执行,这可能已经足够好了(特别是如果由于适当的索引而不必对数据库进行排序,例如当您按主键字段排序时)。
但一般来说,您希望使用 SQL 解决方案。
【讨论】:
在 oracle 中你也可以使用 where rownum
在 mysql 上还有一个 Limit 关键字(我认为)
【讨论】: