获取前X位用户以及特定用户(如果他们不在前X位)

时间:2020-03-06 14:28:14  来源:igfitidea点击:

我有一个排名用户列表,并希望选择前50名用户。我还想确保该结果集中有一个特定用户,即使他们不在前50名中。有什么明智的方法吗?这在单个mysql查询中?还是我应该只检查特定用户的结果,并在必要时单独获取他?

谢谢!

解决方案

如果我理解正确,则可以执行以下操作:

select * from users order by max(rank) desc limit 0, 49  
union  
select * from users where user = x

这样,我们将获得49位顶级用户以及特定用户。

不管是否可以执行单个奇特的SQL查询,最可维护的代码可能是两个查询:

select user from users where id = "fred"; 
select user from users where id != "fred" order by rank limit 49;

当然," fred"(或者任何人)通常会被占位符代替,但具体情况取决于环境。

declare @topUsers table(
    userId int primary key,
    username varchar(25)
)
insert into @topUsers
select top 50 
    userId, 
    userName
from Users
order by rank desc

insert into @topUsers
select
    userID,
    userName
from Users
where userID = 1234 --userID of special user

select * from @topUsers

最简单的解决方案取决于要求以及数据库支持的内容。

如果我们不介意重复结果的可能性,那么简单的结合(如Mariano Conti所示)就可以了。

否则,我们可以做类似的事情

select distinct <columnlist>
from (select * from users order by max(rank) desc limit 0, 49 
      union 
      select * from users where user = x)

如果数据库支持它。