sql查询获取主select查询上的行排名或位置

dfty9e19  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(375)

我想从我的表中得到一个特定行的等级 SELECT 查询。
这是我的table:

| PID   | Age   |
|------ |-----  |
| 5295  | 27    |
| 4217  | 26    |
| 2935  | 25    |
| 8706  | 24    |

我的查询和代码: I'm using SQL Server ```
$x = 0;
$query = odbc_exec($connect, "SELECT * FROM mytable ORDER BY Age DESC"); // Ordering by "Age" Descending
while($row = odbc_fetch_array($query)) {
$x++;
if($row['PID'] == 2935) { break; // Stop }
}

echo $x; // output "3"

这种方法是可行的,但问题是这可以用简单的单机版完成吗 `SQL Query` 而不是 `looping` 通过所有结果然后递增 `$x` 变量来获取 `specified row` 军衔。因为这个表包含数千个条目,循环时会有点滞后,直到找到所需的行,然后停止循环。
这个排名的逻辑,因为我命令 `Age` 降序,例如它将以 `27` 有等级的 `1` 沿着 `24` 有等级的 `4` .
我怎样才能做到这一点?
xwmevbvl

xwmevbvl1#

你可以用 row_number() 在子查询中为每条记录分配一个列组,然后在外部查询中筛选出感兴趣的行:

select *
from (
    select t.*, row_number() over(order by age desc) rn
    from mytable t
) t
where pid = 2935

在mysql中,仅在版本8.0中支持窗口函数。在sqlserver中,它们已经存在很长时间了。

相关问题