2.05 处理排序空值

问题:在emp中根据comm排序结果。但是,这个字段可以有空值。需要指定是否将控制排在最后。

解决方案:根据数据的显示方式,以及特定的rdbms排序空值的方式,可以按照升序或降序来对空值的列排序。

select ename,sal,comm from emp
    order by 3

select ename,sal,comm from emp
    order by 3 desc

这种解决方案中,如果可为空值的列包含非空值,那么也可以根据要求,按升序或降序排序,这可能正是所期待的,也许不是。

如果希望空值的排序与非空值不同,例如,要以升序或降序方式来排序非空值,将空值放在最后,则可使用case表达式有条件的排序列。

使用case表达式来标记一个值是否为为NULL。这个标记有两个值,一个表示NULL,一个表示非NULL。这样,只要在order by子句中增加标记列,便可以很容易的控制空值是排在前面还是最后,而不会被非空值所干扰。

select ename,sal,comm from(
    select ename,sal,comm, 
        case when comm is null then 0 else 1 end as is_null from emp
        ) X
order by is_null desc,comm;

时间: 2024-10-12 20:14:23

2.05 处理排序空值的相关文章

hql排序空值放在后边

由于mysql的一些写法在hql里不支持,所以查询各种资料后得出 如果排序要求为,假如说A字段排序(A字段存入的都是数字的字符串),当A字段为空时排在最后,并且为空的用修改时间modify_date来排序,可以这样写 order by case when ifnull(A,'')='' then 0 else 1 end desc, A+0 asc,modify_date asc A+0时防止出现排序出现1,11,123,11234,2,3,4....的情况 原文地址:https://www.c

sqlserver、oracle数据库排序空值null问题解决办法

转:https://www.cnblogs.com/pacer/archive/2010/03/02/1676371.html [sqlserver]: sqlserver 认为 null 最小. 升序排列:null 值默认排在最前. 要想排后面,则:order by case when col is null then 1 else 0 end ,col 降序排列:null 值默认排在最后. 要想排在前面,则:order   by case when col is null then 0 el

【排序算法】05选择排序

接上文:[排序算法]04快速排序 选择排序的思路:共需要进行length-1次选择,每次选择要找到选择范围内最小记录的位置, 将最小记录与选择范围内的第一个记录互换位置. 向工具类ArraySorterUtils中添加选择排序的实现,代码如下: 1 package org.liws1.sort; 2 3 import java.util.Arrays; 4 import java.util.Comparator; 5 6 /** 7 * 数组的排序,这里统一做升序排序 8 */ 9 public

linq排序之 根据文本 A-001-002-003 这种类型进行分割排序 空值放于最后

调用 1 List<string> data = new List<string>() { 2 "D-001-001-001","A-001-004-001","A-001-002-001", 3 "A-002-001-001", "F-004-001-001", "A-003-001-001", 4 "A-004-001-004","

SQLCookbook 学习笔记 结果排序

select name from emp order by salary; ORDER BY 默认是按照升序排列, 当需要倒序时 用 ORDRE BY salary DESC ORDER BY  不一定要基于列名 ,也可以用数字表示 基于第几列: select name from emp order by 3;         salary是从左到右第三列. 按照多个字段排序 select * from emp order by depno, salary desc; 按照部门升序,在部门内部按

[转]各种排序算法及其java程序实现

原文:http://blog.csdn.net/t12x3456/article/details/7430700 各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想: 两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止.2. 排序过程: 设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的

hiho一下&#183;47 拓扑排序&#183;一(判断是否能够Topo排序)

题意  中文 简单的Topo排序  用vector实现邻接表比较方便 #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; vector<int> e[N]; vector<int>::iterator it; int n, m, ideg[N]; bool topo() { int cur; queue<int> q; for(int i = 1; i <= n; +

Oracle查询优化改写--------------------给查询结果排序

一.查看员工所雇员工信息(查询部门号==10并且按照入职时间升序排序.第二种用数字来代替) 二.按多个字段排序(dmpno,deptno,sal,ename,job) 三.按照子串排序(有一种速查方法,就是按照顾客电话号码尾号的顺序记录,这样查询的时候就可以很快缩小查询范围) last_name 名称 phone_number号码 salary 工资 四.translate(expt,from_string,to_string) 五.处理排序空值 六.根据条件取不同列中的值来排序(领导对工资在1

数据库高手(DBA专家 ,SSIS,replacation ,tourble shooting)

http://www.cnblogs.com/qanholas/category/266780.html 随笔分类 - mssql SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载) 摘要: 很久没写blog,不是懒,实在是最近我这的访问速度不好,用firefox经常上传不了图片 .......今天无意发现了SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引,分享一下:测试环境:USETEMPDBGOCREA