Читайте также:
|
|
_> GROUP BY product_cd, open_branch_id, open_emp_id;
+____________+___________+________+______________+ | product_cd | branch_id | emp_id | tot_deposits | +____________+___________+________+______________+
| BUS | | | | | | | 9345.55 | | | ||
| BUS | | | | | | | 0.00 | | | ||
| CD | | | | | | | 11500.00 | | | ||
| CD | | | | | | | 8000.00 | | | ||
| CHK | | | | | | | 782.16 | | | ||
| CHK | | | | | | | 3315.77 | | | ||
| CHK | | | | | | | 1057.75 | | | ||
| CHK | | | | | | | 67852.33 | | | ||
| MM | | | | | | | 14832.64 | | | ||
| MM | | | | | | | 2212.50 | | | ||
| SAV | | | | | | | 767.77 | | | ||
| SAV | | | | | | | 700.00 | | | ||
| SAV | | | | | | | 387.99 | | | ||
| SBL | | | | | | | 50000.00 | | |
+____________+___________+________+______________+ 14 rows in set (0.01 sec)
Это – сердце запроса; все остальные таблицы нужны только для того, чтобы обеспечить осмысленные строки для шапки таблицы вместо имен столбцов внешних ключей product_cd, open_branch_id и open_emp_id. Сле_ дующий запрос включает запрос к таблице account в качестве подзапроса и соединяет результирующую таблицу с тремя остальными таблицами:
mysql> | SELECT p.name product, b.name branch, |
_> | CONCAT(e.fname, ' ', e.lname) name, |
_> | account_groups.tot_deposits |
_> | FROM |
_> (SELECT product_cd, open_branch_id branch_id, | |
_> | open_emp_id emp_id, |
_> | SUM(avail_balance) tot_deposits |
_> | FROM account |
_> | GROUP BY product_cd, open_branch_id, open_emp_id) account_groups |
_> | INNER JOIN employee e ON e.emp_id = account_groups.emp_id |
_> | INNER JOIN branch b ON b.branch_id = account_groups.branch_id |
Использование подзапросов | |||||
_> INNER JOIN product p ON p.product_cd = account_groups.product_cd | |||||
_> WHERE p.product_type_cd = 'ACCOUNT'; | |||||
+________________________+_______________+_________________+______________+ | |||||
| product | | branch | | name | | tot_deposits | | ||
+________________________+_______________+_________________+______________+ | |||||
| certificate of deposit | Headquarters | | Michael Smith | | | 11500.00 | | | |
| checking account | | Headquarters | | Michael Smith | | | 782.16 | | |
| money market account | | Headquarters | | Michael Smith | | | 14832.64 | | |
| savings account | | Headquarters | | Michael Smith | | | 767.77 | | |
| certificate of deposit | | Woburn Branch | | Paula Roberts | | | 8000.00 | | |
| checking account | | Woburn Branch | | Paula Roberts | | | 3315.77 | | |
| savings account | | Woburn Branch | | Paula Roberts | | | 700.00 | | |
| checking account | | Quincy Branch | | John Blake | | | 1057.75 | | |
| money market account | | Quincy Branch | | John Blake | | | 2212.50 | | |
| checking account | | So. NH Branch | | Theresa Markham | | | 67852.33 | | |
| savings account | | So. NH Branch | | Theresa Markham | | | 387.99 | | |
+________________________+_______________+_________________+______________+ 11 rows in set (0.00 sec)
Я понимаю, что «на вкус и цвет товарищей нет», но этот вариант за_ проса мне нравится намного больше, чем большая плоская версия. И он может быстрее выполняться, потому что группировка проведена по небольшим столбцам внешних ключей (product_cd, open_branch_id, open_emp_id), а не по столбцам, предположительно содержащим длин_ ные строки (branch.name, product.name, employee.fname, employee.lname).
Дата добавления: 2015-08-17; просмотров: 77 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Подзапросы, ориентированные на задачи | | | Подзапросы в условиях фильтрации |