如果我做的事情
SELECT * FROM mytable ORDER BY mycolumn ASC;
Run Code Online (Sandbox Code Playgroud)
我按特定顺序获得结果表.
有没有一种方法在SQL中有效地找出,给定PK,该结果表中的哪个位置将包含我的PK记录?
Guf*_*ffa 22
您可以计算您正在排序的值的值低于您知道键值的记录的值:
select count(*)
from mytable
where mycolumn < (select mycolumn from mytable where key = 42)
Run Code Online (Sandbox Code Playgroud)
And*_*mar 19
在支持它的数据库上,您可以使用ROW_NUMBER()来实现此目的:
SELECT RowNr
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY mycolumn) AS RowNr,
mycolumn
FROM mytable
) sub
WHERE sub.mycolumn = 42
Run Code Online (Sandbox Code Playgroud)
该示例假设您正在寻找主键42 :)
子查询是必要的,因为类似于:
SELECT
ROW_NUMBER() OVER (ORDER BY mycolumn) AS RowNr
FROM mytable
WHERE sub.mycolumn = 42
Run Code Online (Sandbox Code Playgroud)
将永远返回1; 可以这么说,ROW_NUMBER()在WHERE之后工作.
| 归档时间: |
|
| 查看次数: |
28097 次 |
| 最近记录: |