吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1232|回复: 14
收起左侧

[求助] sql case when分组后 如何针对每个组进行排序

[复制链接]
ppgjx 发表于 2022-5-27 16:10
本帖最后由 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 = 1  order by case when isauthor_auth = 1 and online != 0 then 1  when isauthor_auth = 1 and online = 0 then 2 when isauthor_auth = 0 and online != 0 then 3  when isauthor_auth = 0 and online = 0 then 4 end

现在又有一个需求 就是 case then分了四个组排序 我想在想对这四个组 分别进行 login_time  最后登录时间进行降序排序 应该怎么写呢? 是针对于每个组进行最后登录时间降序排序 不是全部

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

huanwuying 发表于 2022-5-27 16:27
要排序的都写到order里面,比如order by ** desc,** desc ,*** desc
 楼主| ppgjx 发表于 2022-5-27 16:30
huanwuying 发表于 2022-5-27 16:27
要排序的都写到order里面,比如order by ** desc,** desc ,*** desc

这个没办法拍 这个条件
xinzdf110 发表于 2022-5-27 16:43
 楼主| ppgjx 发表于 2022-5-27 16:43
马杏争1994 发表于 2022-5-27 16:34
select * from (
select a.*,
(case when (isauthor_auth = 1 and online = 0) then 0

好像执行不了
xinzdf110 发表于 2022-5-27 16:47
select * from   table   where  is   在线认证主播
union  all
select * from   table   where  is  离线认证主播
union  all
select * from   table   where  is  在线非认证主播
......
snwjas 发表于 2022-5-27 16:47
这个简单啊,只不过可能效率不咋地,索引打不上
[SQL] 纯文本查看 复制代码
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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ppgjx + 1 + 1 谢谢@Thanks!

查看全部评分

xiaoyxf 发表于 2022-5-27 16:49
应该可以,拼接online和isauthor_auth的值,然后把排序条件按 online和isauthor_auth的值转义好,比如在线认证主播,  就是31,   然后用拼接的值按转义的值去排序
ly765893958 发表于 2022-5-27 16:56
snwjas 发表于 2022-5-27 16:47
这个简单啊,只不过可能效率不咋地,索引打不上
[mw_shl_code=sql,true]order by case when isauthor_auth ...

楼上正解
1270698424 发表于 2022-5-27 17:00
本帖最后由 1270698424 于 2022-5-27 17:03 编辑

[SQL] 纯文本查看 复制代码
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)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表