Sql top 使用

TOP:
语法:select top num|percent column_name[s]|* from table_name
作用:取前num条记录,或按百分比返回记录
支持数据库:MS SQL


num实例:
例1.取数据库前5条记录
MS SQL实现:
select top 5 * from customers;


其他数据库对应实现
MySQL:
select * from customers limit 5;


Oracel:
select * from customers where ROWNUM <= 5;


例2:从第m行开始,取n行数据
MS SQL实现:
select top n * from customers where id not in (select top m id from tablename);


其他数据库对应实现
MySQL:
select * from customers limit n offset m;


Oracel:
SELECT * FROM(
SELECT * , ROWNUM AS BEF FROM(SELECT * FROM [TABLE] ORDER BY [ORDER]) WHERE ROWNUM <= (m+n))
WHERE CON >= m;




percent实例
例1.取数据库前50%记录
MS SQL实现:
select top 10 percent * from customers; 


其他数据库对应实现
需要使用count配合计算
SQL中,`TOP 1` 主要用于返回查询结果集中的第一条记录,不同数据库系统在使用上存在一定差异。 ### SQL Server 中 `TOP 1` 的使用 - **返回指定列的第一个记录的值**:按指定列升序排序,返回指定列中第一个记录的值。 ```sql SELECT TOP 1 column_name FROM table_name ORDER BY column_name ASC; ``` 例如: ```sql SELECT TOP 1 name FROM Websites ORDER BY id ASC; ``` - **返回指定列的最后一个记录的值**:按指定列降序排序,返回指定列中最后一个记录的值。 ```sql SELECT TOP 1 column_name FROM table_name ORDER BY column_name DESC; ``` 例如: ```sql SELECT TOP 1 name FROM Websites ORDER BY id DESC; ``` - **直观展示作用结果**:`SELECT TOP 1 1 FROM xxx` 是 SQL Server 的语法,适合初学者观看其作用结果 [^1]。 ### 将 SQL Server 的 `TOP 1` 转换到 Oracle 在 Oracle 中没有 `TOP 1` 语法,需要使用 `rownum` 来实现类似功能。为尽量遵循 SQL - 92 语法,减少非标准 SQL使用,将 `TOP 1 … ORDER BY` 翻译成 `rownum` 相关的语句 [^2]。 ### 在分组中取每组的第一条记录(以 T - SQL 为例) 使用公共表表达式(CTE)结合 `ROW_NUMBER()` 窗口函数,按指定列分组并排序,取每组排序后的第一条记录。 ```sql with cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY ChartKey,WorkflowKey ORDER BY EditDate DESC) AS rn FROM pins ) SELECT * FROM cte WHERE rn = 1; ``` 这里按 `ChartKey` 和 `WorkflowKey` 分组,按 `EditDate` 降序排序,取每组中 `EditDate` 最新的记录 [^5]。 ### 结合窗口函数实现排名后取第一条记录 在 SQL 中编写查询实现数值排名后取前几条记录,可使用窗口函数。例如对 `jobs` 表中的 `salary_high` 列进行排名,取排名前 3 的记录。 ```sql SELECT salary_high, dense_rank() over(ORDER BY salary_high DESC) AS `Rank` FROM jobs LIMIT 3; ``` 这里使用 `dense_rank()` 窗口函数按 `salary_high` 降序排名,再取前 3 条记录 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值