获取前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)
如果数据库支持它。

