Изучаем sql



Pdf көрінісі
бет145/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   141   142   143   144   145   146   147   148   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )


Глава 8. Группировка и агрегаты
| CD | 2 | 8000.00 |
| CD | NULL | 19500.00 |
| CHK | 1 | 782.16 |
| CHK | 2 | 3315.77 |
| CHK | 3 | 1057.75 |
| CHK | 4 | 67852.33 |
| CHK | NULL | 73008.01 |
| MM | 1 | 14832.64 |
| MM | 3 | 2212.50 |
| MM | NULL | 17045.14 |
| SAV | 1 | 767.77 |
| SAV | 2 | 700.00 |
| SAV | 4 | 387.99 |
| SAV | NULL | 1855.76 |
| SBL | 3 | 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):


Условия групповой фильтрации


Достарыңызбен бөлісу:
1   ...   141   142   143   144   145   146   147   148   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет