order by 里面进行排序问题?

weiluo12 2013-12-19 12:51:23
一张订单信息表 kc_sale_order。
现在根据状态把所有记录查询出来,并且把指定操作人员OPT_ID排在前面,然后按创建时间倒序
效果已经处理,一个不明白的地方,如下红色字体是什么意思?麻烦尽量说详细一下!谢谢!!!

SELECT * FROM kc_sale_order WHERE SALE_ORDER_STATE IN ('10','15','20','25','40','50','55') ORDER BY
( CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END),CREATE_TIME DESC;
...全文
202 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
terryps 2013-12-24
  • 打赏
  • 举报
回复
支持Rapidshare Freakshare Rapidgator Hotfile Keep2share Ryushare Filepost Lumfile Filemates Bitshare Filefactory Extabit Netload Uploaded.to Ul.to Ctdisk Sufile 等主流网盘会员直接高速下载!Ctdisk城通网盘/Dbank华为网盘/Sufile.com完全免费!http://wishuhappy.com/ [@nlbEjb0RbhmryBx2L/wm3A==]
weiluo12 2013-12-23
  • 打赏
  • 举报
回复
明白了,谢谢大家!!! 这样更好理解!!! SELECT *,( CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END) as temp FROM kc_sale_order WHERE SALE_ORDER_STATE IN ('10','15','20','25','40','50','55') ORDER BY temp,CREATE_TIME DESC;
lennyofdebian 2013-12-23
  • 打赏
  • 举报
回复
CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END 意思是把OPT_ID=12的列单独列出来,对于单独里出来的OPT_ID=12的列应放在结果集的位置就有1或者4来决定,对于本例,1<4,那么就是把IPT_ID=12的结果靠前排列,其他结果在后,当然1或者4都可以用其他值代替,不是不可变的,只需要OPT_ID=12设定的值小于其他情况设定的值即可。
weiluo12 2013-12-23
  • 打赏
  • 举报
回复
谢谢大家的回复 CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END--------------是我想要的结果 CASE WHEN OPT_ID = 12 THEN 4 ELSE 1 END--------------是错误的结果 这是为什么? 或者大家推荐一下这方面的帖子。 谢谢!!!
ACMAIN_CHM 2013-12-23
  • 打赏
  • 举报
回复
相关的知识可以参考一下MYSQL官方免费手册中的说明和例子。
gw6328 2013-12-20
  • 打赏
  • 举报
回复
这样子理解吧.你就把这个当成一个新的列,这列是 当OPT_ID==12的他就为1否他就为4 所以这里的数据按你这个sql来说你写 1,2或者-1,0 或者1,1000 都是这个一样的效果 只是用来排序
码无边 2013-12-20
  • 打赏
  • 举报
回复
引用 4 楼 weiluo12 的回复:
[quote=引用 3 楼 zy205817 的回复:] CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END 等价于 if (OPT_ID == 12) OPT_ID = 1 else OPT_ID =4
1和4 是什么意思? 必须是1和4吗 不可以写成其它数字吗? 谢谢!!![/quote] 是不是1或者4,根据自己需求来定。
benluobo 2013-12-19
  • 打赏
  • 举报
回复
楼主最好自己试验一下 给别的值是什么结果 能搞懂原理才能真正弄明白
benluobo 2013-12-19
  • 打赏
  • 举报
回复
引用 3 楼 zy205817 的回复:
CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END 等价于 if (OPT_ID == 12) OPT_ID = 1 else OPT_ID =4
如果不清楚 就多看看这个不是赋值的意思,这只是给排序一个标志而已,不用给1和4 随便给 只要第一个小于第二个就可以
weiluo12 2013-12-19
  • 打赏
  • 举报
回复
引用 3 楼 zy205817 的回复:
CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END 等价于 if (OPT_ID == 12) OPT_ID = 1 else OPT_ID =4
1和4 是什么意思? 必须是1和4吗 不可以写成其它数字吗? 谢谢!!!
码无边 2013-12-19
  • 打赏
  • 举报
回复
CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END 等价于 if (OPT_ID == 12) OPT_ID = 1 else OPT_ID =4
weiluo12 2013-12-19
  • 打赏
  • 举报
回复
引用 楼主 weiluo12 的回复:
一张订单信息表 kc_sale_order。 现在根据状态把所有记录查询出来,并且把指定操作人员OPT_ID排在前面,然后按创建时间倒序 效果已经处理,一个不明白的地方,如下红色字体是什么意思?麻烦尽量说详细一下!谢谢!!! SELECT * FROM kc_sale_order WHERE SALE_ORDER_STATE IN ('10','15','20','25','40','50','55') ORDER BY ( CASE WHEN OPT_ID = 12 THEN 1 ELSE 4 END),CREATE_TIME DESC;
THEN 1 ELSE 4 END 1和4分别是什么意思呢?
benluobo 2013-12-19
  • 打赏
  • 举报
回复
将 OPT_ID = 12的放在最前面,然后再根据创建时间

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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