Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

Упорядочение вывода по номеру столбца

Вместо имен столбца, вы можете использовать их порядковые номера для указания поля, используемого в упорядочении вывода. Эти номера могут ссылаться не на порядок столбцов в таблице, а на их порядок в выводе. Другими словами, поле упомянутое в предложении SELECT первым, для ORDER BY - это поле 1, независимо от того каким по порядку оно стоит в таблице. Например, вы можете использовать следующую команду чтобы увидеть определенные поля таблицы Продавцов, упорядоченными в порядке убывани к наименьшему значению комиссионных ( вывод показывается Рисунке 7.7 ):

SELECT sname, comm FROM Salespeople GROUP BY 2 DESC;

SQL Execution Log
(SELECT sname, comm FROM Salespeople ORDER BY 2 DESC;
sname comm
Peel 0.17
Serres 0.13
Rifkin 0.15

Рисунок 7. 7: Упорядочение исполяьзующее номера Одна из основных целей этой возможности ORDER BY - дать вам возможность использовать GROUP BY со столбцами вывода также как и со столбцами таблицы. Столбцы производимые агрегатной функцией, константы, или выражения в предложении SELECT запроса, абсолютно пригодны для исполяьзования с GROUP BY, если они ссылаются к ним с помощью номера. Например, давайте сосчитаем порядки каждого из наших продавцов, и выведем результаты в убывающем порядке, как показано в Рисунке 7.8:

SELECT snum, COUNT ( DISTINCT onum ) FROM Orders GROUP BY snum ORDER BY 2 DESC;

SQL Execution Log

SELECT snum, odate, MAX (amt)

FROM Orders

GROUP BY snum

ORDER BY 2 DESC;

snum  
1001 3
1002 3
1007 2
1003 1
1004 1

Рисунок 7.8: Упорядочение с помощью столбца вывода

В этом случае, вы должны использовать номер столбца, так как столбец вывода не имеет имени; и вы не должны использовать саму агрегатную функцию. Строго говоря по правилам ANSI SQL, следующее не будет работать, хотя некоторые системы и пренебрегают этим требованием:

SELECT snum, COUNT ( DISTINCT onum ) FROM Orders GROUP BY snum GROUP BY COUNT ОМ ( DISTINCT onum ) DESC;

Это будет отклонено большинством систем!