SQL - Yalnızca ilk 10 satır seçilsin mi?


124

Bir sorgunun yalnızca ilk 10 sonucunu nasıl seçerim?

Aşağıdaki sorgudan yalnızca ilk 10 sonucu görüntülemek istiyorum:

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
Lütfen veritabanını (ve sürümünü) belirtin.
Vikas Goel


Ayrıca
Mahkum

Yanıtlar:


173

SQL sunucusunda şunu kullanın:

select top 10 ...

Örneğin

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

MySQL'de şunu kullanın:

select ... order by num desc limit 10

44

RDBMS'nize bağlıdır

MS SQL Sunucusu

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Vb.


7
... LIMIT 10 sözdizimi, sqlite3 tarafından da kullanılıyor
dat

24

MySQL'de:

SELECT * FROM `table` LIMIT 0, 10

1
Limit 0, 10 ve limit 10 arasındaki fark nedir? Ve neden 10'u, 20'yi bana 10. ve 20. sıralar arasında 10 sıra vermiyor? DÜZENLEME: Oh, bu yüzden 10, 20 sınırı, bana 10. satırdan sonra 20 satır ver anlamına gelir. 10 ile 20 arasındaki satırlar istiyorsam 10, 10 ile sınırlandırmam gerekiyor. Teşekkürler!
AbdurRehman Khan

21

ANSI SQL yanıtı 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

Bağların dahil edilmesini istiyorsanız, FETCH FIRST 10 ROWS WITH TIESbunun yerine yapın.

Belirli sayıda satırı atlamak için OFFSET, örn.

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

İlk 20 satırı atlayacak ve ardından 10 satırı getirecektir.

Oracle, PostgreSQL , MS SQL Server, Mimer SQL ve DB2'nin daha yeni sürümleri tarafından desteklenir .


20

Standart SQL'de şunları kullanabilirsiniz:

... FETCH FIRST 10 ROWS ONLY

Bu, DB2, PostgreSQL ve Oracle 12.1'de (ve sonrasında) desteklenir


PostgreSQL için de
ralf.w.

18

torpil

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMher satırın sıra numarası 1'i içeren sihirli bir değişkendir .. n .


1
Bu yanlış. "rownum" tablodan en üstteki 'n' satırı getirecektir. "Ne olursa olsun" koşulundan süzülmez!
Vikas Goel

stackoverflow.com/questions/874082/… Lütfen Oracle ile ilgili DB için hala yanıtını izleyin
Vikas Goel

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  

Bu benim için çalıştı. Mümkünse, bakabileceğiniz birkaç yararlı dbscript'im var

Yararlı Dbscripts


2

Aradığınız şey bir LIMIT maddedir.

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];


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.