mysql:选择至少有m属性的第n行?

jaql4c8m  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(260)

所以我有这样一个数据库:

id            role              name
1             admin              A     
2             admin              B
3             admin              C
4             admin              D
5             user               E
6             user               F
7             user               G

例如,现在我想查询得到随机的4行,其中至少有2个管理员角色和1个用户角色。有点像这样:
从表中选择*其中role=“admin”至少2个,role=“user”至少1个
所以我想要的是a,c,d,e或a,b,e,f,但不是a,b,c,d或a,e,f,g。
有没有这样的查询方法?谢谢。

m3eecexj

m3eecexj1#

您可以将两行用于admin,一行用于user排列在最上面:

select t.*
from (select t.*,
             row_number() over (partition by role order by rand()) as seqnum
      from t
     ) t
order by ((case when role = 'admin' then seqnum else 999 end) <= 2) desc,
         ((case when role = 'user' then seqnum else 999 end) <= 2) desc,
         rand()
limit 4

这将为每个对象分配一个序列号 role . 然后它在 order by 检索你想要的号码。
这是一把小提琴。

6yt4nkrj

6yt4nkrj2#

你可以使用联合所有
这样地
(selectfrom mytable where role='admin'limit 2)union all(selectfrom mytable where role='user'limit 2)

相关问题