Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 等级对联盟_Sql_Rank - Fatal编程技术网

Sql 等级对联盟

Sql 等级对联盟,sql,rank,Sql,Rank,嗨,我需要根据where子句中满足的条件对我的行进行排序。所以我写了这个查询 select 1 as priority, usr_fname, usr_lname from core_users where usr_fname = 'John' and usr_lname = 'smith' and suburb = '0162' union select 2 as priority, usr_fname, usr_lname from core_users where usr_fname =

嗨,我需要根据where子句中满足的条件对我的行进行排序。所以我写了这个查询

select 1 as priority, usr_fname, usr_lname from core_users where usr_fname = 'John' and usr_lname = 'smith' and suburb = '0162'
union
select 2 as priority, usr_fname, usr_lname from core_users where usr_fname = 'John' and usr_lname = 'smith' and usr_title = 'Mr' 
union
select 3 as priority, usr_fname, usr_lname from core_users where usr_fname = 'John' and usr_lname = 'smith'

现在我的TL坚持我可以在这里使用sql rank()/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' ;
您可以使用
densite\u rank()
而不是
row\u number()
来获得同等的优先级。但是,如果数据中未显示所有三组,则数字将为“1”或“1”和“2”

但是,更简单的版本只使用了一个
大小写
表达式,并执行您想要的操作:

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' ;

您的版本多次返回同一行——对于匹配的每个优先级返回一次。每行只返回一次,我猜这是您的实际意图。

请标记您的RDBMSCool。我使用的是更简单的版本:D