PGSQL->ORDER BY多条件排序

PGSQL的Order by排序原理

当第一个排序条件已经被全部满足,那么就不会看后面的条件

例:

select * from table order by createdTime desc  的结果是如下

PGSQL->ORDER BY多条件排序_第1张图片

那么如果我们再对userName进行升序排序,会不会test1在test2上面呢?

select * from table order by createdTime desc,userName asc,然而结果没有任何变化。

 

当第一个条件只有部分满足,那么未满足的部分会根据后面的条件再次排序,依次类推

列:

1.首先对CreatedTime进行降序排序(DESC),结果如下,

select * from table order by createdTime desc

PGSQL->ORDER BY多条件排序_第2张图片

结果已经根据已有的createdTime进行了降序排序,但是为NULL的两个结果实际上并没有按照createdTime取进行排序,应该是按照自己默认的排序显示,这是因为我createdTime根本就没有值,无法取进行排序判断。

2.然后我们再根据userName进行降序排序

select * from table order by createdTime desc,userName desc

PGSQL->ORDER BY多条件排序_第3张图片

可以看到只有1、2列在对userName进行了又一轮的排序,

为了方便对比,我们只对userName进行排序:

select * from table order by userName desc

PGSQL->ORDER BY多条件排序_第4张图片

对比后可以发现,第一次经过排序的结果并不会因为第二次排序而发生变化,所以可以得出结论:

order by存在多条件时,会按顺序,并根据当前数据中是否包含该条件的值而进行排序(对createdTime排序,只会排序有createdTime值的行),然后依次类推。

小知识:在排序时,如果该项为NULL,那么在DESC排序时会被放结果集上方,在ASC时会被放到结果集下方,

如果需求需要降序时NULL排在数据下方,那么可以添加 NULLS LAST,如 

select * from table order by createdTime desc nulls last

同理如果升序时想让NULL排在数据上方,则为NULLS FIRST

你可能感兴趣的:(PGSQL->ORDER BY多条件排序)