SQL-仅选择前10行?

SQL-仅选择前10行?,sql,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 O

如何仅选择查询的前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
取决于您的RDBMS

MS SQL Server

SELECT TOP 10 ...
MySQL

赛贝斯

SET ROWCOUNT 10
SELECT ...
等等。

在SQL server中,使用:

select top 10 ...
e、 g

在MySQL中,使用:

select ... order by num desc limit 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
   LIMIT 10

在标准SQL中,您可以使用:

。。。只取前10行

DB2、PostgreSQL和Oracle 12.1及更高版本都支持这一点

WHERE ROWNUM <= 10  and whatever_else ;
ROWNUM是一个神奇的变量,它包含MySQL中每一行的序列号1..n.

SELECT * FROM `table` LIMIT 0, 10
这对我很有用。如果可以的话,我有一些有用的dbscript,您可以看看

火鸟:

SELECT FIRST 10 * FROM MYTABLE
ansisql的答案是fetchfirst

如果您希望包含ties,请使用ties取回前10行

要跳过指定数量的行,请使用偏移量,例如

将跳过前20行,然后获取10行

受Oracle、MS SQL Server、Mimer SQL和DB2等较新版本的支持。

PostgreSQL:

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

这个SQLITE3也使用限制10语法。这是错误的。rownum将从表中获取顶部的“n”行。它不会过滤任何其他条件!请按照stili针对Oracle相关数据库的回答进行操作。请提及数据库和版本。这应该是新的答案,也可以尝试排名前10的答案。根据以下内容:这是针对Oracle列出的答案。。对于PostgreSQL,0、10和10之间有什么区别?为什么不限制10,20,在第10行和第20行之间给我10行呢?编辑:哦,所以限制10,20意味着在第10行之后给我20行。如果我想要10到20之间的行,我必须限制10,10。谢谢Limit是第一个答案,但Limit的问题是,若你们有100000条记录,你们想用Limit获取10条,那个么获取100000条记录仍然需要花费整个时间,然后将应用Limit。因此,对于较大的记录,sql查询速度会变慢。这就是为什么我们在寻找极限的替代品。
SELECT FIRST 10 * FROM MYTABLE
SELECT* from <table name> WHERE rownum <= 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
FETCH FIRST 10 ROWS ONLY
...
ORDER BY num DESC
OFFSET 20
FETCH FIRST 10 ROWS ONLY
SELECT  Top(12) Month, Year, Code FROM TempEmp 
ORDER BY  Year DESC,month DESC
SELECT ... LIMIT [num] OFFSET [num];