我有一个简单的问题:
我有一个 postgresql
数据库:Scores(score integer)
。
我如何以最快的速度获得最高的10分?
更新:
我将多次执行此查询,并且我的目标是获得最快的解决方案。
答案 0 :(得分:281)
为此,您可以使用limit
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
答案 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)