如何在postgresql中获得前10个值?

我有一个简单的问题:

我有一个postgresql表:Scores(score integer)

我怎样才能最快地拿到前10分?

更新:

我将做这个查询多次,我的目标是最快的解决方案。

735423 次浏览

为此,你可以使用限制

select *
from scores
order by score desc
limit 10

如果表现是重要的(当它不是;-)寻找一个指数的分数。


从8.4版开始,你还可以使用标准(SQL: 2008) fetch first

select *
from scores
order by score desc
fetch first 10 rows only

正如@Raphvanns指出的,这将给你first 10 rows字面上。要删除重复的值,你必须选择distinct行,例如。

select distinct *
from scores
order by score desc
fetch first 10 rows only

< a href = " http://sqlfiddle.com/ !17/f2976/2/0" rel="noreferrer">SQL小提琴 .

似乎你正在寻找ORDER BY在__abc1结束顺序与限制子句:

SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10

当然,SELECT *可能会严重影响性能,所以要谨慎使用。

注意,如果前10个值中有关联,你将只得到前10行,而不是前10个带有答案的。 例如:如果前5个值是10、11、12、13、14、15,但你的数据包含 10, 10, 11, 12, 13, 14, 15你只能得到10,10,11,12,13,14作为你的前5个LIMIT

这里有一个解决方案,如果有平局,将返回超过10行,但你将得到所有some_value_column在技术上位于前10的行。

select
*
from
(select
*,
rank() over (order by some_value_column desc) as my_rank
from mytable) subquery
where my_rank <= 10
(SELECT <some columns>
FROM mytable
<maybe some joins here>
WHERE <various conditions>
ORDER BY date DESC
LIMIT 10)


UNION ALL


(SELECT <some columns>
FROM mytable
<maybe some joins here>
WHERE <various conditions>
ORDER BY date ASC
LIMIT 10)