指定字段值排序和分组排序

发布于 2018-01-05  326 次阅读


我们知道,oracle或者是mysql语句中的排序就是使用order by这个关键字,然后在后面跟上字段,再用asc和desc表示升序还是降序就可以了,相对复杂些就是在排序的字段上套上一定的函数即可。

例如:

SELECT
*
FROM
t_student t
ORDER BY
t.address ASC,
LEFT (t.birth, 10) DESC;

如果我们想要用我们自定义的顺序显示,那么就需要做一些改变,比如我要以地址中为“杭州”的排在第一位,“上海”的排在第二位,“北京”排在第三位这样子,那么要怎么操作呢?

MYSQL中的方法

order by FIELD(t.address,'杭州','上海','北京');

ORCLE中的方法

 

order by DECODE(t.address,'杭州',1,'上海',2,'北京',3);

或者

order by
CASE
WHEN t.address='杭州' THEN 1
WHEN t.address='上海' THEN 2
WHEN t.address='北京' THEN 3
END;

额外的,如果需要分组排序,则如下

 

oracle的方法,mysql没有经历过:

row_number() over(partition by 分组字段 order by 排序字段) AS 字段别名

在查询语句中增加上述语句作为新字段即可看到排序结果。

内容来源于网络,由自己验证。


生命旅客,闷头赶路总不太可取,留一刻给那可爱可敬的人,留一眼给那靓丽迷人之景,也请善待自己~