|
Программирование >> Sql: полное руководство
SELECT REP OFFICE, MIN(quota), max(quota) FROM SALESREPS GROUP BY REP OFFICE
SELECT REP OFFICE, COUNT(*) FROM SALESREPS GROUP BY REP OFFICE REP OFFICE COUNT(*) NULL 11 12 13 21 22 Скольких клиентов обслуживает каждый служащий? SELECT COUNT(DISTINCT CUST NUM), customers for salesrep, CUST REP FROM CUSTOMERS GROUP BY CUST REP COUNT(DISTINCT CUST NDM)
Между статистическими функциями SQL и предложением group by существует связь Статистическая функция берет столбец значений и возвращает одно значение. Предложение group by указывает, что результаты запроса следует разделить на группы, применить статистическую функцию по отдельности к каждой группе и получить для каждой группы одну строку результатов. В табл 8.2 показаны правила выполнения SQL-запроса на выборку, расширенные с учетом операции группировки. на 8.2. Правщ&ыполнения SQL-запроса на выварку (с учеШёпредложёния GROUP Si} , с J 1лца результатов запроса на выборку генерируется следующим образом: 1 Если запрос представляет собой запрос на объединение (union) инструкций select, для каждой из этих инструкций выполнить действия 2-6 и получить отдельную таблицу результатов. 2. Сформировать произведение таблиц, перечисленных в предложении from Если в предложении from указана только одна таблица, то произведением будет она сама. 3. Если имеется предложение where, применить заданное в нем условие отбора к каждой строке таблицы произведения и оставить в ней только те строки, для которых это условие выполняется, т.е. имеет значение true; строки, для которых условие отбора имеет значение false или null, - отбросить 4. сли имеется предложение group by, разделить строки, оставшиеся в таблице произведения, на группы таким образом, чтобы строки в каждой группе имели одинаковые значения во всех столбцах фуппировки 5. Для каждой из оставшихся строк (или для каждой группы строк) вычислить значение каждого элемента в списке возвращаемых столбцов и создать одну строку таблицы результатов запроса При любой ссылке на столбец берется значение столбца для текущей строки (или группы строк). В качестве аргумента статистической функции используются значения столбца из всех строк, входящих в группу, если указано предложение group by; в противном случае используются значения столбца из всех строк таблицы результатов. 6. Если указан предикат distinct, удалить из таблицы результатов запроса все повторяющиеся строки. 7. Если запрос является запросом на объединение (union) инструкций select, объединить результаты выполнения отдельных инструкций в одну таблицу результатов запроса. Удалить из нее повторяющиеся строки, если не указан предикат all. 8. Если имеется предложение order by, отсортировать результаты запроса Несколько столбцов группировки SQL позволяет группировать результаты запроса на основании двух или более столбцов. Например, предположим, что вам требуется сгруппировать заказы по служащим и клиентам. Эту задачу выполняет приведенный ниже запрос- Подсчитать общее количество заказов по каждому клиенту для каждого служащего SELECT REP, CDST, SUM(AMOUNT) FROM ORDERS GROUP BY REP, CUST REP CUST SUM(AMOUNT) 101 2102 $3,978.00 102 2106 $4,026.00 102 2114 $22,100.00 102 2120 $3,750.00 103 2109 $31,350.00 103 2111 $2,700.00 104 2113 $22,500.00 105 2103 $35,582.00 Даже при группировке по двум столбцам SQL обеспечивает только один уровень группировки. Приведенный запрос генерирует одну итоговую строку для каждой пары служащий/клиент. С помощью SQL невозможно создать группы и подгруппы с двумя уровнями итоговых результатов. Лучшее, что можно сделать, - это отсортировать данные таким образом, чтобы строки в таблице результатов запроса щди в нужном порядке. Во многих СУБД при использовании предложения group by сортировка выполняется автоматически, однако автоматический порядок сортировки можно изменить с помощью предложения order by, как показано ниже: Подсчитать общее количество заказов по каждому клиенту для каждого служащего; отсортировать результаты запроса по клиентам и служащим. SELECT CUST, REP, SUM(AMOUNT)
Обратите внимание на то, что с помощью одного запроса невозможно получить как детальные, так и промежуточные итоговые результаты. Чтобы получить детальные результаты с итогами по группам, необходимо с помощью программного SQL написать приложение и вычислить промежуточные итоговые результаты в программе. В SQL Server это ограничение стандартного SQL устраняется с помощью дополнительного предложения compute, которое добавляется в конец инструкции select. Предложение compute обеспечивает получение промежуточных и общих итогов, как показано в следующем примере: Подсчитать общее количество заказов по каждому клиенту для каждого служащего; отсортировать результаты запроса по служащим, а затем по клиентам. SELECT REP, CUST, AMOUNT FROM ORDERS ORDER BY REP, CUST COMPUTE -SUM (AMOUNT) BY REP, CUST COMPUTE SUM (AMOUNT), AVG (AMOUNT) BY REP
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |