【SQL】将特定的元素按照自己所需的位置排序
Oracle中,平时我们排序常用“Order by 列名” 的方式来排序,但是有的时候我们希望这个列中的某些元素排在前面或者后面或者中间的某个位置。
这时我们可以使用Order by case when then方法。
举例:我们希望本部门的领导的名字在前面。
Select * from parter where lvl='leader' order by ( case when name in('zhangsan','lisi','wangermazi') then 0 else 1 end)
实现的效果是:'zhangsan','lisi','wangermazi' 从头到尾依次排序,剩下的元素排在这三个元素的后面随机排序。把1和0替换,又变成了‘wangermazi’,'lisi','zhangsan'的顺序倒序排序了。
0是我们需要的元素的位置,1是其他元素的位置。
同样的效果我们也可以通过“decode”函数实现
Select * from parter where lvl = 'leader' order by decode(name,'zhangsan',0,'lisi',1,'wangermazi',2,3)
实现的效果与上面相同,其中0,1,2是我们需要的三个元素的位置,3是其他元素的位置。
但是第一个SQL语句有一个问题,如果name字段就只有这三个元素,那么when 完全满足条件,这样这三个元素就变成随机排序了。
所以如果使用case 函数,最好是使用这种方式
Select * from parter where lvl='leader' order by (case when name='zhangsan' then 0 when name='lisi' then 1 name='wangermazi' then 2 else 3 end)
如此,即便name字段只有三个元素,也能按照我们的需求排序了。
需要注意的是,只有我们需要的三个元素是按照我们的所定义的顺序排序的,其余元素是随机排序的,如果我们需要其余元素按照某个字段顺序或者倒序排序,只需要在最后面加逗号字段名即可。
Select * from parter where lvl='leader' order by (case when name='zhangsan' then 0 when name='lisi' then 1 name='wangermazi' then 2 else 3 end),id desc
decode函数相同
Select * from parter where lvl = 'leader' order by decode(name,'zhangsan',0,'lisi',1,'wangermazi',2,3),id desc
由上面的例子我们知道,那些数字就是元素的位置,而如果我们要把自己需要的元素排最后面呢。
只需要改改数字就行了。
case 函数
Select * from parter where lvl='leader' order by (case when name='zhangsan' then 3 when name='lisi' then 2 name='wangermazi' then 1 else 0 end).id desc
decode函数相同
Select * from parter where lvl = 'leader' order by decode(name,'zhangsan',3,'lisi',2,'wangermazi',1,0),id desc
而强大的decode函数还为我们可以将余下的元素按照自己的想法排序。
假如我们要把'zhangsan'和'lisi'排最后,而把'wangermazi'排第一,这时我们可以同时使用两个decode函数
Select * from parter where lvl = 'leader' order by decode(name,'zhangsan',3,'lisi',2,0),decode(name,'wangermazi',0),id desc
如此我们便实现了张三和李四分别排倒数第一和倒数第二,王二麻子排第一,其余元素按照id倒序排列。
如此我们便实现了自己需要的元素按照特定的顺序排序。
【SQL】将特定的元素按照自己所需的位置排序的更多相关文章
- [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)
原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...
- SQL 按特定字段值排序
SQL 按特定字段值排序的代码,有需要的朋友可以参考下. id, name shandong01 name1 shandong02 name2 shandong03 name3 beijing01 n ...
- 获取元素在浏览器中的绝对位置(从jquery1.8中抠出来)
<style> html,body{margin:0;padding:0;} .d1{margin-left:40px;background:red;width:2000px;height ...
- javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)
主要内容: 1.数组整体元素修改 2. 数组筛选 3.jquery 元素转数组 4.获取两个数组中相同部分或者不同部分 5.数组去重并倒序排序 6.数组排序 7.数组截取slice 8.数组插入.删除 ...
- 关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)
关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位) 起因:在进行bootstrap的.navbar-brand内文字设置垂直居中时采用li ...
- Js数组里剔除指定的元素(不是指定的位置)
s数组里删除指定的元素(不是指定的位置)之前一直是做后端的,从来也没有写过js,但是却一直想学学,也只是基于兴趣而已!现在到了这个公司,确实大量的写js.但也一直都是没有系统的去看过js!都是搞什么查 ...
- jquery获取元素在文档中的位置信息以及滚动条位置(转)
jquery获取元素在文档中的位置信息以及滚动条位置 http://blog.csdn.net/qq_34095777/article/details/78750886 原文链接 原创 201 ...
- JS---动画函数封装:设置任意的一个元素,移动到指定的目标位置
动画函数封装:设置任意的一个元素,移动到指定的目标位置 <!DOCTYPE html> <html lang="en"> <head> < ...
- html中如何获取元素在文档中的位置
html中如何获取元素在文档中的位置 一.总结 一句话总结: $("#elem").offset().top $("#elem").offset().left ...
随机推荐
- 2017 济南综合班 Day 3
T1 黑化 题意: 求一个字符串是否可能包含另一个字符串 字符串中的?可以匹配任意字母 可能输出 God bless You! 一定不可能 输出 Game Over! 计算fail数组时,fail数 ...
- [SDOI2011] 染色(Luogu 2486)
题目描述 输入输出格式 输入格式: 输出格式: 对于每个询问操作,输出一行答案. 输入输出样例 输入样例#1: 6 5 2 2 1 2 1 1 1 2 1 3 2 4 2 5 2 6 Q 3 5 C ...
- Java程序运行时的几个区域
Java运行时涉及到的区域 几个基本概念: 1.Java对象 2.Java方法 3.一个编译好的类,以class文件的形式出现 4.Java的本地方法 5.线程私有和线程共有 一 ...
- HDU 1599 find the mincost route (最短路 floyd)
题目链接 Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....V ...
- NodeJS中Buffer模块详解
一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...
- Chrome 浏览器 autocomplete off无效
在表单填写时突然发现autocomplete 失效了 网上搜索后得出大概意思是在某些情况下确实无效[捂脸] 解决方案 大致原因是浏览器默认为type为password的input标签自动填充密码 这样 ...
- fileinput 小计(显示历史上传图片)
今天又需要,要求在选中某条记录后显示历史上传图片 上传控件是fileinput.js 想法:界面有上传图片的控件,重新加载控件,并加入历史上传图片地址 实现代码: var filepathArray ...
- ButterKnife用法详解
http://www.cnblogs.com/zhaoyanjun/p/6016341.html 本文出自[赵彦军的博客] 前言 ButterKnife 简介 ButterKnife是一个专注于And ...
- Port-knocking 简单教程
0. "port knocking" 如字面意思,类似'敲门',只是这里敲的是'端口',而且需要按照顺序'敲'端口.如果敲击规则匹配,则可以让防火墙实时更改策略.从而达到开关防火墙 ...
- php中类的static变量使用
<?php #访问静态变量 #类外部: 类名::$类变量名 #类内部: 娄名::$类变量名或self::$类变量名 class Char{ public static $number = 0; ...