2010-04-06 47 views
2

我在一次采访中被要求编写一个SQL查询,它从表格的某列中提取最高值的前三条记录。我写了一个查询获取所有最高价值的记录,但没有得到我只能得到这些记录的前三个记录。关于数据库查询的简单问题

你能帮我吗?

谢谢。

回答

5

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 
+1

这不是甲骨文正确的。它在ORDER BY之前应用WHERE,所以你得到任何匹配的10行,然后对它们进行排序。 – 2010-04-06 05:45:10

+0

@WW - 将删除Oracle然后。我对它的理解并不足以完全回答它。那是最初来自答案中发布的链接。 – 2010-04-06 05:46:39

+0

在Oracle'SELECT R. * FROM(SELECT * FROM SomeTable ORDER by FieldName DESC)R WHERE rownum <4'将会为你做诡计。当然,还有另一种涉及“LEAD,LAG”Oracle分析功能的方法,这里不能涉及。 – Guru 2010-04-06 07:56:31

1

根据数据库引擎,无论是

select top 3 * from table order by column desc

select * from table order by column desc limit 3

+0

或Oracle上的其他内容... – Thilo 2010-04-06 05:40:02

0

的TOP 3的语法从差别很大数据库到数据库。

不幸的是,您需要使用这些结构才能获得最佳性能。 像Hibernate这样的库可以在这里获得帮助,因为它们可以将通用API转换为各种SQL方言。

由于您在询问Java,因此只需从数据库中选择所有内容(使用ORDER BY),但只能获取前三行。根据查询需要执行的方式,这可能已经足够好了(特别是如果没有对数据库进行排序,则必须使用适当的索引,例如按主键字段进行排序时)。

但总的来说,你想用SQL解决方案。

0

在oracle中,你还可以使用其中的rownum < 4 ...

而且在MySQL是有一定限度的关键字(我认为)