2009-12-12 94 views
54

如何僅選擇查詢的前10個結果?SQL - 僅選擇前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 
+2

請註明數據庫(和版本)的新版本。 – 2014-06-06 11:03:33

+0

應該是新的答案,https://stackoverflow.com/a/36476971/124486 – 2018-01-07 00:32:28

回答

100

在SQL Server中,使用:

select top 10 ... 

例如

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

在MySQL中,使用方法:

select ... order by num desc limit 10 
27

取決於你的RDBMS

MS SQL服務器

SELECT TOP 10 ... 

MySQL的

SELECT ... LIMIT 10 

SYBASE

SET ROWCOUNT 10 
SELECT ... 

等等

+6

... LIMIT 10語法也用於sqlite3 – dat 2013-12-14 03:17:15

2

什麼你要找的是有極限的條款。

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 
12

DB2

... FETCH FIRST 10 ROWS ONLY

+0

也適用於PostgreSQL – 2017-09-04 10:42:48

14

甲骨文

WHERE ROWNUM <= 10 and whatever_else ; 

ROWNUM是魔變量包含每一行的序列號1 .. Ñ

+0

這是錯誤的。 「rownum」將從表格中取出頂部'n'行。它不會從「whatever_else」條件過濾! – 2014-06-06 10:58:33

+0

http://stackoverflow.com/questions/874082/show-only-the-first-n-lines-of-output-of-a-sql-query 請按照stili的答案爲Oracle相關的數據庫 – 2014-06-06 11:08:00

+0

這個答案也適用於JPQL。根據這裏: – Fabian 2017-09-05 13:44:17

10

在MySQL:

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

這個工作對我me.If可以,我有,你可以在

Useful Dbscripts

1

火鳥有看一些有用的dbscripts:

SELECT FIRST 10 * FROM MYTABLE 
0
SELECT* from <table name> WHERE rownum <= 10; 
+0

根據這裏:https://www.w3schools.com/sql/sql_top.asp 這是甲骨文列出的答案..投票。 – eaglei22 2017-05-08 16:12:43

7

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行。

支持甲骨文,PostgreSQL,MS SQL Server和SQL Mimer等

+0

非常感謝這是我搜索的解決方案 – Cjdcoy 2017-10-13 09:46:21