SQL 怎么用指定条件查询RANK函数生成的新排名列?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 怎么用指定条件查询RANK函数生成的新排名列?相关的知识,希望对你有一定的参考价值。

比如这样一张表
testxingming fenshu
张三 70
李四 80
王五 90
赵六 95
然后用SELECT xingming,fenshu,RANK() OVER(ORDER BY fenshu DESC) as paiming from test
能够生paiming列
问题是 paiming 列是临时生成的,我需要对paiming列做条件筛选,比如只选择排名大于1且小于4的行,想在后面加上 where paiming >1 and paiming <4
这时提示 "列名 'paiming' 无效"
请问大神这个问题有解吗?因为实在不想在数据表里添加一列"paiming",因为科目太多,会带来巨大的麻烦。。。

你说的这个问题和rank没有关系,你只是想把查出来的一列数据根据条件再update到表中某一列。 所以你可以用临时表先查出(key, value)这样的组合,然后在通过key相等这样的条件来update你表中对应行的某列的value。 With T Select a.key_no as key, RANK() over(partition by a.key_no order by a.id) as value, From A a update A set a.Some_Column = ( select t.value from T t where t.key = A.key_no ) 参考技术A 需要再套一层子查询, 计算字段直接使用不太方便
select *
from (SELECT xingming,fenshu,RANK() OVER(ORDER BY fenshu DESC) as paiming from test
) t
where paiming >1 and paiming <4本回答被提问者采纳

以上是关于SQL 怎么用指定条件查询RANK函数生成的新排名列?的主要内容,如果未能解决你的问题,请参考以下文章

mysql rank函数怎么用

mysql rank函数怎么用

怎么循序渐进写出分组排名

oracle rank函数怎么用

MySql中row_number()rank()dense_rank() 的区别

Oracle:row_number()rank()dense_rank()