我有一个简单的问题:
我有一个postgresql
表:Scores(score integer)
。
我怎样才能最快地得到最高的10分?
更新:
我将多次执行此查询,并以最快的解决方案为目标。
发布于 2012-12-03 05:29:52
为此,您可以使用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指出的那样,这将给你字面上的first 10 rows
。要删除重复的值,您必须选择distinct
行,例如
select distinct *
from scores
order by score desc
fetch first 10 rows only
发布于 2012-12-03 05:31:35
似乎您正在寻找带有LIMIT子句的DESC
结束顺序中的ORDER BY
:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
当然,SELECT *
可能会严重影响性能,因此请谨慎使用。
发布于 2018-12-31 08:31:54
请注意,如果前10个值中存在平局,则您将只获得前10行,而不是提供答案的前10个值。例如:如果前5个值是10、11、12、13、14、15,但您的数据包含10、10、11、12、13、14、15,则使用LIMIT
时只能得到10、10、11、12、13、14作为前5个值
这是一个解决方案,如果有平局,它将返回超过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
https://stackoverflow.com/questions/13674031
复制相似问题