SQL - wybrać tylko pierwsze 10 wierszy?


124

Jak wybrać tylko pierwszych 10 wyników zapytania?

Chciałbym wyświetlić tylko pierwszych 10 wyników z następującego zapytania:

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
Proszę wspomnieć o bazie danych (i wersji).
Vikas Goel

2
Powinna być nowa odpowiedź, stackoverflow.com/a/36476971/124486
Evan Carroll,

Spróbuj także TOP 10
Prisoner ZERO,

Odpowiedzi:


173

Na serwerze SQL użyj:

select top 10 ...

na przykład

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

W MySQL użyj:

select ... order by num desc limit 10

44

Zależy od twojego RDBMS

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Itp.


7
Składnia ... LIMIT 10 jest również używana przez sqlite3
data

24

W MySQL:

SELECT * FROM `table` LIMIT 0, 10

1
Jaka jest różnica między limitem 0, 10 a limitem 10? I dlaczego nie ogranicza 10, 20 daje mi 10 rzędów między 10 a 20 rzędem? EDYCJA: Och, więc limit 10, 20 oznacza, że ​​daj mi 20 wierszy po 10 rzędzie. Jeśli chcę rzędy od 10 do 20, muszę zrobić limit 10, 10. Dzięki!
AbdurRehman Khan

21

Odpowiedź ANSI SQL brzmi 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

Jeśli chcesz, aby zostały uwzględnione krawaty, zrób to FETCH FIRST 10 ROWS WITH TIES.

Aby pominąć określoną liczbę wierszy, użyj OFFSETnp

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

Pominie pierwsze 20 wierszy, a następnie pobierze 10 wierszy.

Obsługiwane przez nowsze wersje Oracle, PostgreSQL , MS SQL Server, Mimer SQL i DB2 itp.


20

W standardowym SQL możesz użyć:

... FETCH FIRST 10 ROWS ONLY

Jest to obsługiwane w DB2, PostgreSQL i Oracle 12.1 (i nowszych)


również dla PostgreSQL
ralf.w.

18

Wyrocznia

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMto magiczna zmienna, która zawiera numer porządkowy każdego wiersza 1 .. n .


1
To jest źle. „rownum” pobierze górne wiersze z tabeli. Nie będzie filtrować z warunku „cokolwiek_else”!
Vikas Goel

stackoverflow.com/questions/874082/… Proszę postępować zgodnie z odpowiedzią stili dotyczącą bazy danych związanej z Oracle
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  

To zadziałało dla mnie, jeśli mogę, mam kilka przydatnych skryptów dbscriptu, które możesz obejrzeć

Przydatne Dbscripts


2

To, czego szukasz, to klauzula 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




Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.