Сортировка по нескольким полям (ORDER BY)

Задача

Требуется сортировать строки таблицы EMP сначала по стобцу DEPTNO по возрастанию, а затем по заработным платам по убыванию.


Решение

В операторе ORDER BY через запятую перечислите столбцы, по которым должна проводиться сортировка:


select e.empno, e.deptno, e.sal, e.ename, e.job
from emp e
order by e.deptno, e.sal desc;


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
    7654     30 1250 MARTIN     SALESMAN
    7521     30 1250 WARD       SALESMAN
    7900     30 950 JAMES      CLERK

    14 rows selected


Обсуждение

Старшинство столбцов, по которым осуществляется сортировка, в операторе ORDER BY определяется слева направо. Если столбце задается его порябковым номером в списке оператора SELECT, то это число не должно превышать количества элементов в списке SELECT. Можно проводить сортировку по столбцу, не входящему в список SELECT, но для этого необходимо явно указать его имя. Тем не менее, при использовании в запросе операторов GROUP BY или DISTINCT сортировка может осуществляться только по столбцам из списка оператора SELECT.