Читайте также:
|
|
_> GROUP BY product_cd, open_branch_id WITH ROLLUP;
+____________+________________+_____________+ | product_cd | open_branch_id | tot_balance | +____________+________________+_____________+
| BUS | | | | | 9345.55 | | | ||
| BUS | | | | | 0.00 | | | ||
| | BUS | | | NULL | | 9345.55 | | | |
| | CD | | | | | 11500.00 | | |
Глава 8. Группировка и агрегаты | |||||
| CD | | | | | 8000.00 | | | |
| CD | | | NULL | | 19500.00 | | | |
| CHK | | | | | 782.16 | | | |
| CHK | | | | | 3315.77 | | | |
| CHK | | | | | 1057.75 | | | |
| CHK | | | | | 67852.33 | | | |
| CHK | | | NULL | | 73008.01 | | | |
| MM | | | | | 14832.64 | | | |
| MM | | | | | 2212.50 | | | |
| MM | | | NULL | | 17045.14 | | | |
| SAV | | | | | 767.77 | | | |
| SAV | | | | | 700.00 | | | |
| SAV | | | | | 387.99 | | | |
| SAV | | | NULL | | 1855.76 | | | |
| SBL | | | | | 50000.00 | | | |
| SBL | | | NULL | | 50000.00 | | | |
| NULL | | | NULL | | 170754.46 | | |
+____________+________________+_____________+ 21 rows in set (0.02 sec)
Теперь имеется семь дополнительных результатов, по одному для каж_ дого из шести разных типов счетов, и один – общая сумма (для всех ти_ пов счетов). Для шести обобщений по типам счетов столбец open_ branch_id содержит значение null, поскольку обобщение осуществляет_ ся по всем отделениям. Например, взглянув на строку #3 результата, можно заметить, что всего по счетам BUS во всех отделениях внесено 9 345,55 долларов. Строка итоговой суммы в обоих столбцах, prod_ uct_cd и open_branch_id, содержит значение null. Последняя строка вы_ ходных данных показывает общую сумму 170 754,46 долларов для всех типов счетов и всех отделений.
При работе с Oracle Database для выполнения обобщения приме_ няется немного отличающийся синтаксис. Блок group by из пре_ дыдущего запроса при использовании в Oracle выглядел бы так:
GROUP BY ROLLUP(product_cd, open_branch_id)
Преимущество этого синтаксиса в том, что он позволяет выпол_ нять обобщения для подмножества столбцов в блоке group by. Например, если группировка осуществляется по столбцам a, b и c, можно было бы указать, что сервер должен проводить обоб_ щения только для b и c:
GROUP BY a, ROLLUP(b, c)
Если кроме суммы по типам счетов требуется подсчитать сумму по каж_ дому отделению, можно использовать вариант with cube, который фор_ мирует строки суммы для всех возможных сочетаний группирующих столбцов. К сожалению, with cube недоступен в MySQL версии 4.1, но есть в SQL Server и Oracle Database. Вот пример использования with cube (я убрал приглашение mysql>, чтобы показать, что этот запрос пока нельзя осуществить в MySQL):
Условия групповой фильтрации | |
Дата добавления: 2015-08-17; просмотров: 64 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Группировка по нескольким столбцам | | | FROM account |