Sql Scholl
Распечатать страницу
Перейти на главную Карта сайта Отправить сообщение

Итоговые данные

Создание групп

      Группы создаются с помощью предложения GROUP BY оператора SELECT.
      Лучше всего это можно объяснить на примере:

SELECT vend_id, COUNT(*) AS num_prods FROM Products GROUP BY vend_id;



vend_id        num_prods 
------------   ----------------
BRSOl          3
DLLOl          4
FNGO1          2

     Вышеприведенный оператор SELECT предписывает вывести два столбца —vend_id, содержащий идентификатор поставщика продукта, и num_prods, содержащий вычисляемые поля (он создается с помощью функции COUNT (*)). Предложение GROUP BY указывает СУБД сортировать данные и группировать их по столбцу vend_id. В результате значение num__prods будет вычисляться по одному разу для каждой группы записей vend_id, а не один раз для всей таблицы products. Как видите, в результатах указывается, что поставщик BRS01 предлагает три продукта, поставщик DLL01 — четыре продукта, а поставщик FNG01 — 2 продукта.

     Поскольку было использовано предложение GROUP BY, не потребовалось указывать каждую группу, для которой должны быть произведены вычисления. Это было сделано автоматически. Предложение GROUP BY указывает СУБД группировать данные и затем выполнять вычисление по каждой группе, а не по всему набору результатов.

Прежде чем использовать предложение GROUP BY, ознакомьтесь с важными правилами, которыми необходимо руководствоваться:

     •      В предложениях GROUP BY можно указывать столько столбцов, сколько вам необходимо. Это позволяет вкладывать группы одна в другую, благодаря чему обеспечивается тщательный контроль за тем, какие данные подлежат группированию.

     •      Если вы используете вложенные группы в предложении GROUP BY, данные суммируются для последней указанной вами группы. Другими словами, если введено группирование, вычисления осуществляются для всех указанных столбцов (вы не сможете вернуть данные для каждого отдельного столбца).

     •      Каждый    столбец,    указанный    в    предложении GROUP BY, должен быть столбцом выборки или выражением (но не функцией группирования). Если в операторе SELECT используется какое-то выражение, то же самое выражение должно быть указано в предложении GROUP BY. Псевдонимы применять нельзя.

     •      В большинстве реализаций SQL нельзя указывать в предложении GROUP BY столбцы, в которых содержатся данные переменной длины (т.е. столбцы, содержащие текстовые поля или поля комментариев).

     •      За исключением операторов статистических вычислений,   каждый   столбец,   упомянутый   в   операторе SELECT, должен быть представлен в предложении GROUP BY.

     •      Если столбец, подлежащий группированию, содержит строку со значением NULL, оно будет возвращено в качестве группы. Если имеется несколько строк со значениями NULL, они будут сгруппированы вместе.

     •      Предложение GROUP BY должно следовать после предложения   WHERE   и   до   какого-либо   предложения ORDER BY.

Предложение ALL

В некоторых реализациях SQL (например, в Microsoft SQL Server) опционально поддерживается предложение all в предложении group by. Это предложение можно использовать для возвращения всех групп, даже тех, которые не имеют соответствующих строк (в этом случае функция группирования возвращает значение NULL). Обратитесь к документации своей СУБД, чтобы узнать, поддерживает ли она предложение ALL.

Указание столбцов по их относительному положению

Некоторые реализации SQL позволяют указывать столбцы в предложении group by по их положению в списке select. Например, выражение group by 2,1 может означать группирование по выбранному второму столбцу и затем по первому. Хотя этот "стенографический" синтаксис удобен, он поддерживается не всеми реализациями SQL. Его применение также является рискованным в том смысле, что весьма высока вероятность появления ошибок при редактировании операторов SQL.