Группировка посредством выражений Кроме столбцов группировку данных можно выполнить на основании
значений, сгенерированных выражениями. Рассмотрим запрос, кото
рый группирует сотрудников по году начала их работы в банке:
mysql>
SELECT EXTRACT(YEAR FROM start_date) year, > COUNT(*) how_many > FROM employee > GROUP BY EXTRACT(YEAR FROM start_date); +++
| year | how_many |
+++
| 2000 | 3 |
| 2001 | 2 |
| 2002 | 8 |
| 2003 | 3 |
| 2004 | 2 |
+++
5 rows in set (0.00 sec)
Этот запрос для группировки строк таблицы
employee
использует до
вольно простое выражение, которое с помощью функции
extract()
из
всей даты извлекает только значение года.
Формирование обобщений Ранее в этой главе в разделе «Группировка по нескольким столбцам»
был показан пример формирования общих остатков счетов по каждо
му типу счетов и отделению. Однако допустим, что кроме общих остат
ков для каждого сочетания тип счетов/отделение требуется получить
и общие остатки по каждому отдельному типу счетов. Можно было бы
выполнить дополнительный запрос и объединить результаты, или за
грузить результаты запроса в электронную таблицу, или создать сце
нарий на Perl или Javaпрограмму, или применить какойлибо другой
механизм для получения данных и проведения дополнительных вы
числений. Но всетаки лучше всего использовать вариант
with
rollup
(с обобщением), заставив выполнить всю эту работу сервер БД. Вот из
мененный запрос, использующий
with
rollup
в блоке
group
by
:
mysql>
SELECT product_cd, open_branch_id, > SUM(avail_balance) tot_balance > FROM account > GROUP BY product_cd, open_branch_id WITH ROLLUP; ++++
| product_cd | open_branch_id | tot_balance |
++++
| BUS | 2 | 9345.55 |
| BUS | 4 | 0.00 |
| BUS | NULL | 9345.55 |
| CD | 1 | 11500.00 |