sql case when分组后 如何针对每个组进行排序
本帖最后由 ppgjx 于 2022-5-27 18:42 编辑我用一个user表 下面是字段
user_id 用户id
online 在线,0离线,1勿扰,2在聊,3在线
isauthor_auth 是否主播认证 0 否 1 是 没有主播认证就是普通用户
login_time 最后登录时间
我现在需要 在线认证主播 -> 离线认证主播 -> 在线非认证主播 -> 离线非认证主播 -> 在线普通用户 -> 离线普通用户 经过大佬回答是这样写的
select * from cmf_user where user_type = 2 and user_status = 1 and sex = 1order by case when isauthor_auth = 1 and online != 0 then 1when isauthor_auth = 1 and online = 0 then 2 when isauthor_auth = 0 and online != 0 then 3when isauthor_auth = 0 and online = 0 then 4 end
现在又有一个需求 就是 case then分了四个组排序 我想在想对这四个组 分别进行 login_time最后登录时间进行降序排序 应该怎么写呢? 是针对于每个组进行最后登录时间降序排序 不是全部 要排序的都写到order里面,比如order by ** desc,** desc ,*** desc huanwuying 发表于 2022-5-27 16:27
要排序的都写到order里面,比如order by ** desc,** desc ,*** desc
这个没办法拍 这个条件 用union all把每个结构连起来 马杏争1994 发表于 2022-5-27 16:34
select * from (
select a.*,
(case when (isauthor_auth = 1 and online = 0) then 0
好像执行不了
select * from table whereis 在线认证主播
unionall
select * from table whereis离线认证主播
unionall
select * from table whereis在线非认证主播
......
这个简单啊,只不过可能效率不咋地,索引打不上
order by case when isauthor_auth = 1 and online = 2 then 1
when isauthor_auth = 1 and online = 0 then 2
when isauthor_auth = 0 and online = 2 then 3
when isauthor_auth = 0 and online = 0 then 4
when isauthor_auth is null and online = 2 then 5
when isauthor_auth is null and online = 0 then 6 end 应该可以,拼接online和isauthor_auth的值,然后把排序条件按 online和isauthor_auth的值转义好,比如在线认证主播,就是31, 然后用拼接的值按转义的值去排序 snwjas 发表于 2022-5-27 16:47
这个简单啊,只不过可能效率不咋地,索引打不上
order by case when isauthor_auth ...
楼上正解 本帖最后由 1270698424 于 2022-5-27 17:03 编辑
select * form user
order by(case when (online = '3' and isauthor_auth = '1') then 1
when (online = '0' and isauthor_auth = '1') then 2
when (online = '3' and isauthor_auth = '0') then 3
when (online = '0' and isauthor_auth = '0') then 4
when (online = '3' and isauthor_auth not in ('0','1')) then 5
when (online = '0' and isauthor_auth not in ('0','1')) then 6
else 7 end)
页:
[1]
2