Итоговые данные
Создание групп
Группы создаются с помощью предложения GROUP BY оператора SELECT.
Лучше всего это можно объяснить на примере:
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.



