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
Mike
quelle
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
Derek Slager
quelle
44

Hängt von Ihrem RDBMS ab

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.

Martin Clayton
quelle
7
Die ... LIMIT 10-Syntax wird auch von sqlite3
dat
24

In MySQL:

SELECT * FROM `table` LIMIT 0, 10
Ben
quelle
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.

jarlh
quelle
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.

Brabster
quelle
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 .

Wallyk
quelle
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

sayannayas
quelle
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
AvatarKava
quelle
1

Feuervogel:

SELECT FIRST 10 * FROM MYTABLE
ne2dmar
quelle
1

PostgreSQL:

SELECT ... LIMIT [num] OFFSET [num];
Henry
quelle
0
SELECT  Top(12) Month, Year, Code FROM TempEmp 
ORDER BY  Year DESC,month DESC
JIYAUL MUSTAPHA
quelle