Использование группировки данных при организации запросов
Группировка данных при организации запросов используется для объединения нескольких строк, включаемых в запрос, в одну.
Для выполнения группировки данных в SQL-запросах используется оператор GROUP BY. Оператор GROUP BY перекомпоновывает данные, включаемые в результирующую таблицу. Указание на группировку данных в SQL-запросе осуществляется после ключевого слова FROM. Сам процесс группировки данных при выполнении выборки информации из базы данных в разделы или группы заключается в объединении в одну группу всех строк, которые имеют одно и то же значение поле, указанное после оператора GROUP BY.
Далее, к каждой группе применяется конструкция SELECT. Каждое из выражений, включаемое в конструкцию оператора SELECT, должно принимать единственное значение для группы. Это выражение может быть либо самим полем, указанным в операторе GROUP BY, либо арифметическим выражением, включающим это поле, либо константой, либо такой функцией как SUM, которая оперирует всеми значениями данного поля в группе и сводит эти значения к единственному значению.
Строки таблицы можно группировать по любой комбинации ее полей. Если поле, по значению которого осуществляется группировка, содержит какие-либо неопределенные значения, то каждое из них порождает отдельную группу.
Использование конструкции GROUP BY не предполагает одновременного применения в SQL-запросах и оператора ORDER BY. Для упорядочения результата, полученного после выполнения SQL-запроса, конструкцию ORDER BY <имя поля> необходимо разместить после оператора, указывающего на группировку данных.
Пусть требуется вычислить общий объем покупок для каждого товара, т. е. для каждого товара необходимо определить код этого товара и общий объем покупок. SQL-запрос, соответствующий данному условию, можно представить виде:
SELECT kod, SUM(QUANT)
FROM ORDSALE
GROUP BY kod
Использование группировки данных совместно с условием
Использование группировки при выборе информации из базы данных выводит на экран все поля, значения которых совпадают. Однако на практике эта особенность группировки затрудняет работу пользователя с базой данных, так как после выполнения запроса выводятся лишние записи, значения которых в данный момент не нужны. Для ограничения выборки с упорядочиванием в этом случае используется оператор WHERE.
Например, SQL-запрос
SELECT kod, SUM(QUANT)
FROM ORDSALE
WHERE CUSTOMERNO <> 23
GROUP BY kod
служит для выборки информации о товаре, проданном покупателям кроме покупателя с кодом 23.
Строки, не удовлетворяющие условию WHERE, исключаются перед группировкой данных.
Конструкции GROUP BY свойственно ограничение, которое заключается в том, что она работает только на одном уровне. Невозможно разбить каждую из групп на группы более низкого уровня, а затем применить некоторую стандартную функцию, например, SUM или AVERAGE на каждом уровне группировки.
Использование HAVING
Оператор HAVING используется для ограничения записей, участвующих в группировке, его нельзя использовать отдельно от конструкции GROUP BY. Оператор HAVING используется для того, чтобы исключать группы так же, как WHERE используется для исключения записей. Выражение после конструкции HAVING должно принимать единственное для группы значение. В частности, результатом выполнения запроса
SELECT kod FROM ORDSALE GROUP BY kod HAVING COUNT(*)>1
является таблица, в которую включены коды товаров, приобретенных более чем одним покупателем.
Сортировка
ВкладкаOrdered Byв окне дизайнера запросов позволяет управлять порядком расположения записей в результирующей таблице. Для упорядочивания выделите указателем (курсором) поля, которые будут определять порядок сортировки выбранных данных, и перенесите их последовательно в список Ordering criteria.Для каждого выбранного поля можно с помощью переключателя (кнопки) Order optionsустановить критерий упорядочивания по возрастанию (Ascending) или по убыванию (Descending). Порядок сортировки записей результирующей таблицы определяется порядком следования полей в списке Ordering criteria и критерием упорядочивания отдельных полей.
Пример.Для таблицы Table3необходимо произвести выбор кода (kod), имени (NAME)и суммы кредита (CREDITLIMIT) всех покупателей, проживающих в Ставрополе, расположив их в порядке убывания.
SQL-запрос имеет вид: