Page 140 - 4636
P. 140

Розглянемо  кілька  прикладів,  починаючи  зі  згаданого  раніше.  Середню  суму  замовлення
        можна обчислити таким чином:
              select avg (amount)
              from orders;
              Результат буде приблизно такий:


                                                   avg(amount)
                                                   54.985002'


              Для отримання більш докладної інформації, можна скористатися конструкцією GROUP BY.
        Це дозволить переглянути середню суму замовлення по групах, наприклад, за номером клієнта,
        що дозволить з'ясувати, хто з клієнтів робить найбільші замовлення:
              select customerid, avg(amount)from ordersgroup by customerid;
              Вказівка  конструкції  GROUP  BY  у  поєднанні  з  функцією  агрегування  змінює  поведінку
        функції. Замість того, щоб видавати середню суму всіх замовлень у таблиці, такий запит виведе
        інформацію з середньої суми замовлень, зроблених кожним клієнтом (а якщо точніше, кожним
        customerid):


                                          customerid           avg(amount)

                                          3                    49.990002
                                          4                    74.980003
                                          5                    47.485002

              При використанні функцій  угруповання і агрегування необхідно звернути  увагу на такий
        момент: якщо функція агрегування або конструкція GROUPBY використовується в ANSISQL, в
        операторі  SELECT  можуть  бути  тільки  функції  агрегування  і  стовпці,  зазначені  в  конструкції
        GROUPBY. Крім того, якщо стовпець потрібно задіяти в конструкції GROUPBY, він повинен бути в
        операторі SELECT.
              Насправді  MySQL  забезпечує  набагато  більшу  свободу  дій,  підтримує  розширений
        синтаксис, який дає можливість видаляти непотрібні елементи з оператора SELECT.
              Крім  угруповання  і  агрегування  даних  є  можливість  перевірити  результат  агрегування,
        використовуючи конструкцію HAVING. Вона слідує відразу після конструкції GROUPBY і подібна
        до конструкції WHERE, однак застосовується лише до груп.
              Щоб розширити попередній приклад, скажімо, для отримання інформації про те, у кого з
        клієнтів  середня  сума  замовлення  перевищує  50  доларів,  можна  скористатися  наступним
        запитом:
              select customerid, avg(amount)
              from orders
              group by customerid
              having avg(amount) > 50;
              Зверніть увагу, що конструкція HAVING застосовується до груп. Такий запит призводить до
        отримання такого результату:


                                                    avg(amount)

                                                    74.980003


                                                            137
   135   136   137   138   139   140   141   142   143   144   145