Впорядкування агрегатних груп

ORDER BY може крім того, використовуватися з GROUP BY для впорядкування груп. Якщо це так, то ORDER BY завжди приходить останнім. Ось - приклад з останньої глави з додаванням пропозиції ORDER BY. Перед групуванням виведення порядок груп був довільним, і ми тепер, змусимо групи розміщуватися в послідовності:

SELECT snum, odate, MAX (amt) FROM Orders GROUP BY snum, odate ORDER BY snum;

Висновок показується на рисунку 7.6.

Так як ми не вказували на зростання або спадання Замовлення, зростання використовується за умовчанням.

Впорядкування виведення за номером стовпця

Замість імен стовпців ви можете використовувати їх порядкові номери для вказівки поля, використовуваного в упорядкуванні виведення. Ці номери можуть посилатися на порядок стовпців в таблиці, а на їх порядок у висновку. Іншими словами, поле згадане в реченні 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;

Це буде відхилено більшістю систем!