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

时间:2012-12-02 21:27:04

标签: sql postgresql sql-limit

我有一个简单的问题:

我有一个 postgresql 数据库:Scores(score integer)

我如何以最快的速度获得最高的10分?

更新:

我将多次执行此查询,并且我的目标是获得最快的解决方案。

4 个答案:

答案 0 :(得分:281)

为此,您可以使用limit

select *
from scores
order by score desc
limit 10

如果表现很重要(何时不是;-)寻找得分指数。


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

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

答案 1 :(得分:34)

似乎您在使用LIMIT子句的ORDER BY结束顺序中寻找DESC

SELECT
 *
FROM
  scores
ORDER BY score DESC
LIMIT 10

当然SELECT *会严重影响效果,因此请谨慎使用。

答案 2 :(得分:0)

请注意,如果前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() (order by some_value_column desc) as my_rank
  from
     mytable) subquery
where my_rank <= 10

答案 3 :(得分:0)

(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)