[sql] postgresql에서 상위 10 개 값을 얻는 방법은 무엇입니까?

간단한 질문이 있습니다.

나는이 postgresql데이터베이스를 : Scores(score integer).

가장 높은 10 점을 가장 빨리 얻으려면 어떻게해야합니까?

최신 정보:

이 쿼리를 여러 번 수행하고 가장 빠른 솔루션을 목표로하고 있습니다.



답변

이를 위해 당신은 한계 를 사용할 수 있습니다

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

SQL 바이올린


답변

LIMIT 절 을 사용 ORDER BY하여 DESC끝 순서로 찾고있는 것 같습니다 .

SELECT
 *
FROM
  scores
ORDER BY score DESC
LIMIT 10

물론 SELECT *성능에 심각한 영향을 줄 수 있으므로주의해서 사용하십시오.


답변

상위 10 개 값에 관계가있는 경우 제공된 답변 이 포함 된 상위 10 개 이 아니라 상위 10 개 행만 가져옵니다 . 예 : 상위 5 개 값이 10, 11, 12, 13, 14, 15이지만 데이터에 10, 10, 11, 12, 13, 14, 15가 포함 된 경우 10, 10, 11, 12, 13, 당신의 상위 5로 14LIMIT

다음은 동점이있는 경우 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


답변

(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)


답변