如果你真的用
row_number()
,可以获得3个以上的值:
select usr_fname, usr_lname,
row_number() over (case when suburb = '0162' then 1
when usr_title = 'Mr' then 2
else 3
end) as priority
from core_users
where usr_fname = 'John' and usr_lname = 'smith' ;
您可以通过使用
dense_rank()
而不是
行数()
是的。但是,如果数据中不表示这三个组,则数字将为“1”或“1”和“2”。
然而,更简单的版本只使用
case
表达和做你想做的事:
select usr_fname, usr_lname,
(case when suburb = '0162' then 1
when usr_title = 'Mr' then 2
else 3
end) as priority
from core_users
where usr_fname = 'John' and usr_lname = 'smith' ;
您的版本会多次返回同一行——每匹配一个优先级返回一次。这只返回每一行一次,我猜这是您的实际意图。