Сортировка по нескольким полям (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.