sql语句order by多条件排序

麻婆斗腐 2014-07-18 05:02:25
order by (case when type=‘vip’ and level = '1' then 1 when type=‘vip’ and level = '0' then 2 else 99 end), creatTime desc
我希望先类型type为vip的排在最前,
其次vip按照级别level为“1”排前面,“0”排后面
最后vip按创建时间creatTime升序排列
非vip按创建时间creatTime倒序排列
求教,主要是后面这个creatTime排序该怎么写
...全文
17280 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiajing1990_ 2017-02-27
  • 打赏
  • 举报
回复
你这样的方式 是可以的 10L也可以
墨笙弘一 2017-02-27
  • 打赏
  • 举报
回复
你在order by 后面可不可以这样搞 case when type='vip' then asc else desc end
引渡 2017-02-27
  • 打赏
  • 举报
回复
我是来学习的
Joyce-Luo 2014-07-21
  • 打赏
  • 举报
回复
引用 3 楼 hcrystald 的回复:
[quote=引用 2 楼 luo201227 的回复:] 说的不清不楚:
order by type desc,level desc,vip.createtime,notvip.createtime desc
额,就是一张表有 type,level,creatTime这些字段,然后我想将查询结果排序 type为vip的排在最前 其次vip按照级别level为“1”排前面,“0”排后面,如果level相同的话按创建时间creatTime升序排列 非vip就一个排序,按创建时间creatTime倒序排列 比如: ----------------------------- type level creatTime vip 0 10 vip 1 40 vip 0 30 vip 1 8 no 0 22 no 0 50 no 1 33 查询结果如下: vip 1 8 vip 1 40 vip 0 10 vip 0 30 no 0 50 no 1 33 no 0 22 求大神教我飞[/quote] 那sql基本上满足你的需求了。。。。自己好好试试看
麻婆斗腐 2014-07-21
  • 打赏
  • 举报
回复
引用 2 楼 luo201227 的回复:
说的不清不楚:
order by type desc,level desc,vip.createtime,notvip.createtime desc
额,就是一张表有 type,level,creatTime这些字段,然后我想将查询结果排序 type为vip的排在最前 其次vip按照级别level为“1”排前面,“0”排后面,如果level相同的话按创建时间creatTime升序排列 非vip就一个排序,按创建时间creatTime倒序排列 比如: ----------------------------- type level creatTime vip 0 10 vip 1 40 vip 0 30 vip 1 8 no 0 22 no 0 50 no 1 33 查询结果如下: vip 1 8 vip 1 40 vip 0 10 vip 0 30 no 0 50 no 1 33 no 0 22 求大神教我飞
Joyce-Luo 2014-07-21
  • 打赏
  • 举报
回复
说的不清不楚:
order by type desc,level desc,vip.createtime,notvip.createtime desc
汤姆的猫 2014-07-21
  • 打赏
  • 举报
回复
select type,level,createTime from
(
	select 
		type,
		level,
		createTime,
		case when type=='no' then -1 else level end level_forOrder,
		case when type=='no' then createTime*-1 else createTime end createTime_forOrder 
	from person_info
) order by type desc,level_forOrder asc,createTime desc
试试
于金龙 2014-07-21
  • 打赏
  • 举报
回复
字符串也可以比较大小的!
 order by t.type desc,t.creatTime desc
ouyangxiaokang6 2014-07-21
  • 打赏
  • 举报
回复
引用 5 楼 hcrystald 的回复:
这个问题我已经解决了,用的是这个
select * from(select * from person_info t where t.type='vip' order by (case when t.level='1' then 1 when t.level='0' then 2 else 0 end),t.creatTime)
UNION ALL
select * from(
select * from person_info t where t.type='no' order by t.creatTime DESC)
不清楚有没有更好的方法
貌似没有更好的办法呢。
wnf2009 2014-07-21
  • 打赏
  • 举报
回复
不能再代码中直接拼接order by 后面的东西么?
繁华终归落尽 2014-07-21
  • 打赏
  • 举报
回复
排序尽量在业务逻辑中处理,尽量减少在数据库中直接排序
麻婆斗腐 2014-07-21
  • 打赏
  • 举报
回复
这个问题我已经解决了,用的是这个
select * from(select * from person_info t where t.type='vip' order by (case when t.level='1' then 1 when t.level='0' then 2 else 0 end),t.creatTime)
UNION ALL
select * from(
select * from person_info t where t.type='no' order by t.creatTime DESC)
不清楚有没有更好的方法
abc130314 2014-07-18
  • 打赏
  • 举报
回复
把 creatTime 转换成一个整数,例如:毫秒值,然后 vip 的 乘-1,非vip 乘1

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧