SQL - Nur die ersten 10 Zeilen auswählen?


123

Wie wähle ich nur die ersten 10 Ergebnisse einer Abfrage aus?

Ich möchte nur die ersten 10 Ergebnisse der folgenden Abfrage anzeigen:

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
Bitte erwähnen Sie die Datenbank (und Version).
Vikas Goel

2
Sollte die neue Antwort sein, stackoverflow.com/a/36476971/124486
Evan Carroll

Versuchen Sie auch TOP 10
Prisoner ZERO

Antworten:


172

Verwenden Sie in SQL Server:

select top 10 ...

z.B

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

Verwenden Sie in MySQL:

select ... order by num desc limit 10

44

Hängt von Ihrem RDBMS ab

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.


7
Die ... LIMIT 10-Syntax wird auch von sqlite3
dat

24

In MySQL:

SELECT * FROM `table` LIMIT 0, 10

1
Was ist der Unterschied zwischen Limit 0, 10 und Limit 10? Und warum begrenzt 10, 20 nicht 10 Zeilen zwischen der 10. und 20. Zeile? EDIT: Oh, also Limit 10, 20 bedeutet, mir 20 Zeilen nach der 10. Zeile zu geben. Wenn ich Zeilen zwischen 10 und 20 haben möchte, muss ich 10, 10 begrenzen. Danke!
AbdurRehman Khan

21

Die ANSI SQL-Antwort lautet 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

Wenn Sie möchten, dass Krawatten aufgenommen werden, tun Sie dies FETCH FIRST 10 ROWS WITH TIESstattdessen.

Um eine bestimmte Anzahl von Zeilen zu überspringen, verwenden Sie OFFSETz

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

Überspringt die ersten 20 Zeilen und ruft dann 10 Zeilen ab.

Unterstützt von neueren Versionen von Oracle, PostgreSQL , MS SQL Server, Mimer SQL und DB2 usw.


20

In Standard-SQL können Sie Folgendes verwenden:

... FETCH FIRST 10 ROWS ONLY

Dies wird in DB2, PostgreSQL und Oracle 12.1 (und höher) unterstützt.


auch für PostgreSQL
ralf.w.

18

Orakel

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMist eine magische Variable, die die Sequenznummer 1 jeder Zeile enthält. n .


1
Das ist falsch. "rownum" ruft die obersten 'n' Zeilen aus der Tabelle ab. Es wird nicht aus der Bedingung "Whatever_else" gefiltert!
Vikas Goel

stackoverflow.com/questions/874082/… Bitte folgen Sie der Antwort von stili für Oracle-bezogene DB
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  

Das hat bei mir funktioniert. Wenn ich darf, habe ich ein paar nützliche DBScripts, die Sie sich ansehen können

Nützliche DBScripts


2

Was Sie suchen, ist eine LIMIT-Klausel.

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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.