我有一个简单的问题:
我有一个postgresql表:分数(分数整数)。
我怎样才能最快地拿到前10分?
更新:
我将做这个查询多次,我的目标是最快的解决方案。
我有一个简单的问题:
我有一个postgresql表:分数(分数整数)。
我怎样才能最快地拿到前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)
其他回答
你可以用limit
select *
from scores
order by score desc
limit 10
如果表现是重要的(当它不是;-)寻找一个指数的分数。
从8.4版本开始,还可以先使用标准(SQL:2008)获取
select *
from scores
order by score desc
fetch first 10 rows only
正如@Raphvanns指出的,这将为您提供前10行。要删除重复的值,您必须选择不同的行,例如。
select distinct *
from scores
order by score desc
fetch first 10 rows only
SQL小提琴
似乎您正在寻找ORDER BY降序与LIMIT子句:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
当然,SELECT *可能会严重影响性能,所以要谨慎使用。
(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)
请注意,如果前10个值中有关联,您将只获得前10行,而不是提供答案的前10个值。 例如:如果前5个值是10、11、12、13、14、15,但你的数据包含 10, 10, 11, 12, 13, 14, 15你只能得到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