SQL Cookbook:二、查询结果排序(2)按多个字段排序
问题
在EMP表中,首先按照DEPTNO的升序排序,然后按照工资的降序排序,结果集应该如下所示:
EMPNO
DEPTNO
SAL
ENAME
JOB
---------- ---------- --------- ---------- --------- 7839 10 5000 KING PRESIDENT 7782 10 2450 CLARK MANAGER 7934 10 1300 MILLER CLERK 7788 20 3000 SCOTT ANALYST 7902 20 3000 FORD ANALYST 7566 20 2975 JONES MANAGER 7876 20 1100 ADAMS CLERK 7369 20 800 SMITH CLERK 7698 30 2850 BLAKE MANAGER 7499 30 1600 ALLEN SALESMAN 7844 30 1500 TURNER SALESMAN 7521 30 1250 WARD SALESMAN 7654 30 1250 MARTIN SALESMAN 7900 30 950 JAMES CLERK
解决方案
在ORDER BY子句中列出不同的排序列,使用逗号分隔:
select empno,deptno,sal,ename,job from emp order by deptno, sal desc
讨论
在ORDER BY中,优先次序是从左到右。如果在SELECT列表中使用列的数字位置进行排序,那么这个数值必须不能大于SELECT列表中项目的数目。一般情况下都可以执照SELECT列表中没有的列来排序,但是必须显式地给出排序的列名。如果在查询中使用GROUP BY或DISTINCT则不能按照SELECT列表中没有的列来排序。