SQL-처음 10 개 행만 선택 하시겠습니까?


124

쿼리의 처음 10 개 결과 만 선택하려면 어떻게합니까?

다음 쿼리에서 처음 10 개의 결과 만 표시하고 싶습니다.

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC

3
데이터베이스 (및 버전)를 언급하십시오.
Vikas Goel

2
새로운 답변이어야합니다. stackoverflow.com/a/36476971/124486
Evan Carroll

또한 TOP 10 시도
죄수 ZERO

답변:


173

SQL 서버에서 다음을 사용하십시오.

select top 10 ...

예 :

select top 100 * from myTable
select top 100 colA, colB from myTable

MySQL에서는 다음을 사용하십시오.

select ... order by num desc limit 10

44

RDBMS에 따라 다름

MS SQL 서버

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

기타.


7
... LIMIT 10 구문은 sqlite3에서도 사용됩니다
dat

24

MySQL에서 :

SELECT * FROM `table` LIMIT 0, 10

1
제한 0, 10 및 제한 10의 차이점은 무엇입니까? 그리고 10, 20을 제한하지 않는 이유는 10 번째와 20 번째 행 사이에 10 개의 행을 제공하지 않습니까? 편집 : 아, 그래서 10, 20 제한은 10 번째 행 이후에 20 행을 제공한다는 것을 의미합니다. 10과 20 사이의 행을 원하면 10, 10을 제한해야합니다. 감사합니다!
AbdurRehman Khan

21

ANSI SQL 대답은 FETCH FIRST.

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC
FETCH FIRST 10 ROWS ONLY

동점을 포함하려면 FETCH FIRST 10 ROWS WITH TIES대신하십시오.

지정된 수의 행을 건너 뛰려면 다음을 사용하십시오 OFFSET.

...
ORDER BY num DESC
OFFSET 20
FETCH FIRST 10 ROWS ONLY

처음 20 개 행을 건너 뛴 다음 10 개 행을 가져옵니다.

최신 버전의 Oracle, PostgreSQL , MS SQL Server, Mimer SQL 및 DB2 등에서 지원됩니다.


20

표준 SQL에서는 다음을 사용할 수 있습니다.

... FETCH FIRST 10 ROWS ONLY

이는 DB2, PostgreSQL 및 Oracle 12.1 (이상)에서 지원됩니다.


PostgreSQL의 경우도
ralf.w.

18

신탁

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUM각 행의 시퀀스 번호 1을 포함하는 매직 변수입니다. n .


1
이것은 잘못된 것입니다. "rownum"은 테이블에서 상위 'n'행을 가져옵니다. "whatever_else"조건에서 필터링되지 않습니다!
Vikas Goel

stackoverflow.com/questions/874082/... Oracle 용 되요하여 답을 따르십시오은 DB 관련
카스 고엘

2
SELECT *  
  FROM (SELECT ROW_NUMBER () OVER (ORDER BY user_id) user_row_no, a.* FROM temp_emp a)  
 WHERE user_row_no > 1 and user_row_no <11  

이것은 나를 위해 일했습니다. 내가 볼 수있는 유용한 dbscript가 거의 없다면

유용한 Dbscript


2

당신이 찾고있는 것은 LIMIT 절입니다.

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC
   LIMIT 10


1

PostgreSQL :

SELECT ... LIMIT [num] OFFSET [num];


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.