我有一个简单的问题:
我有一个postgresql表:Scores(score integer)。
postgresql
Scores(score integer)
我怎样才能最快地拿到前10分?
更新:
我将做这个查询多次,我的目标是最快的解决方案。
为此,你可以使用限制
select * from scores order by score desc limit 10
如果表现是重要的(当它不是;-)寻找一个指数的分数。
从8.4版开始,你还可以使用标准(SQL: 2008) fetch first
fetch first
select * from scores order by score desc fetch first 10 rows only
正如@Raphvanns指出的,这将给你first 10 rows字面上。要删除重复的值,你必须选择distinct行,例如。
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结束顺序与限制子句:
ORDER BY
SELECT * FROM scores ORDER BY score DESC LIMIT 10
当然,SELECT *可能会严重影响性能,所以要谨慎使用。
SELECT *
LIMIT
这里有一个解决方案,如果有平局,将返回超过10行,但你将得到所有some_value_column在技术上位于前10的行。
some_value_column
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)