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

Sql 获取前X个用户,以及特定用户(如果他们不在前X),sql,mysql,database,Sql,Mysql,Database,我有一个排名用户列表,并想选择前50名。我还想确保这个结果集中有一个特定的用户,即使他们不在前50名。在一个mysql查询中是否有一个合理的方法来实现这一点?或者我应该检查特定用户的结果,并在必要时单独获取他 谢谢 如果我理解正确,您可以: select * from users order by max(rank) desc limit 0, 49 union select * from users where user = x 通过这种方式,您可以获得49个顶级用户以及您的特定用户

我有一个排名用户列表,并想选择前50名。我还想确保这个结果集中有一个特定的用户,即使他们不在前50名。在一个mysql查询中是否有一个合理的方法来实现这一点?或者我应该检查特定用户的结果,并在必要时单独获取他


谢谢

如果我理解正确,您可以:

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

通过这种方式,您可以获得49个顶级用户以及您的特定用户。

如果我理解正确,您可以:

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或其他人通常会被占位符替换,但具体取决于环境

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

select user from users where id = "fred"; 
select user from users where id != "fred" order by rank limit 49;
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

当然,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)

如果您的数据库支持它。

最简单的解决方案取决于您的需求以及您的数据库支持什么

如果你不介意有重复结果的可能性,那么像马里亚诺·康蒂(Mariano Conti)所展示的那样简单的结合就可以了

否则,您可以执行以下操作

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

如果您的数据库支持它。

问得好。您可以添加一个“where user!=选择好的问题。您可以添加一个“where user!=“x”到顶部选择只需记住“top 50”适用于SQL Server但不适用于MySQL,请使用限制0,50代替。只需记住“top 50”适用于SQL Server但不适用于MySQL,请使用限制0,50代替