Читайте также:
|
|
В системах, используемых для создания отчетов или наборов данных, часто встречаются следующие запросы:
mysql> | SELECT p.name product, | b.name branch, | |
_> | CONCAT(e.fname, ' ', | e.lname) name, | |
_> | SUM(a.avail_balance) | tot_deposits | |
_> | FROM | account a INNER JOIN employee e | |
_> | ON | a.open_emp_id = e.emp_id | |
_> | INNER JOIN branch b | ||
_> | ON | a.open_branch_id = b.branch_id | |
_> | INNER JOIN product p | ||
_> | ON | a.product_cd = p.product_cd | |
_> | WHERE p.product_type_cd = 'ACCOUNT' | ||
_> | GROUP BY p.name, b.name, e.fname, e.lname; | ||
+________________________+_______________+_________________+______________+ | product | branch | name | tot_deposits | +________________________+_______________+_________________+______________+
| certificate of deposit | | Headquarters | | Michael Smith | | | 11500.00 | | |
| certificate of deposit | | Woburn Branch | | Paula Roberts | | | 8000.00 | | |
| checking account | | Headquarters | | Michael Smith | | | 782.16 | | |
| checking account | | Quincy Branch | | John Blake | | | 1057.75 | | |
| checking account | | So. NH Branch | | Theresa Markham | | | 67852.33 | | |
| checking account | | Woburn Branch | | Paula Roberts | | | 3315.77 | | |
| money market account | | Headquarters | | Michael Smith | | | 14832.64 | | |
| money market account | | Quincy Branch | | John Blake | | | 2212.50 | | |
| savings account | | Headquarters | | Michael Smith | | | 767.77 | | |
| savings account | | So. NH Branch | | Theresa Markham | | | 387.99 | | |
| savings account | | Woburn Branch | | Paula Roberts | | | 700.00 | | |
+________________________+_______________+_________________+______________+ 11 rows in set (0.02 sec)
188 Глава 9. Подзапросы
Этот запрос суммирует все остатки депозитных счетов по типу счета, сотруднику, открывшему счета, и отделениям, в которых были откры_ ты счета. Если внимательнее посмотреть на запрос, увидим, что табли_ цы product, branch и employee нужны только в целях отображения и что все необходимое для группировки (product_cd, open_branch_id, open_emp_id
и avail_balance) есть в таблице account. Поэтому задачу по формирова_ нию групп можно было бы выделить в подзапрос, а затем для получе_ ния нужного результата соединить остальные три таблицы с табли_ цей, сгенерированной подзапросом. Вот подзапрос группировки:
mysql> SELECT product_cd, open_branch_id branch_id, open_emp_id emp_id,
Дата добавления: 2015-08-17; просмотров: 57 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Формирование таблиц | | | Gt; SUM(avail_balance) tot_deposits _> FROM account |