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