我有一个简单的问题:
我有一个 postgresql
表格:Scores(score integer)
。
如何最快地获取前十个最高分数?
更新:
我将多次执行此查询,并且力求找到最快的解决方案。
我有一个简单的问题:
我有一个 postgresql
表格:Scores(score integer)
。
如何最快地获取前十个最高分数?
更新:
我将多次执行此查询,并且力求找到最快的解决方案。
这可以使用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
正如@Raphvanns所指出的,这将直接给您前10行。要删除重复值,您必须选择不同的行,例如使用distinct
。
select distinct *
from scores
order by score desc
fetch first 10 rows only
看起来你正在寻找使用LIMIT子句以DESC
方式排序的ORDER BY
:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
当然,SELECT *
可能会严重影响性能,因此要谨慎使用。
LIMIT
时,你只会得到10、10、11、12、13、14作为前5个值。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)