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 2014


また、TOP 10
Prisoner 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 2014

stackoverflow.com/questions/874082/…Oracle 関連のDBについてはstiliの回答に従ってください
Vikas Goel


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




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.