Читайте также: |
|
_> WHERE open_date > '1999_12_31' _> GROUP BY YEAR(open_date);
+______+__________+ | year | how_many | +______+__________+
| 2000 | | | | |||
| 2001 | | | | | ||
| 2002 | | | | | ||
| | | | | | ||
| | | | | |
+______+__________+
5 rows in set (0.00 sec)
Чтобы трансформировать этот результирующий набор в одну строку с шестью столбцами (по одному для каждого года, с 2000 по 2005), по_ надобится создать шесть столбцов и в каждом столбце просуммировать только строки, относящиеся к данному году:
Глава 11. Условная логика | ||||
mysql> | SELECT | |||
_> | SUM(CASE | |||
_> | WHEN EXTRACT(YEAR FROM open_date) = | 2000 THEN 1 | ||
_> | ELSE | |||
_> | END) | year_2000, | ||
_> | SUM(CASE | |||
_> | WHEN | EXTRACT(YEAR FROM open_date) = | 2001 THEN 1 | |
_> | ELSE | |||
_> | END) | year_2001, | ||
_> | SUM(CASE | |||
_> | WHEN | EXTRACT(YEAR FROM open_date) = | 2002 THEN 1 | |
_> | ELSE | |||
_> | END) | year_2002, | ||
_> | SUM(CASE | |||
_> | WHEN | EXTRACT(YEAR FROM open_date) = | 2003 THEN 1 | |
_> | ELSE | |||
_> | END) | year_2003, | ||
_> | SUM(CASE | |||
_> | WHEN | EXTRACT(YEAR FROM open_date) = | 2004 THEN 1 | |
_> | ELSE | |||
_> | END) | year_2004, | ||
_> | SUM(CASE | |||
_> | WHEN EXTRACT(YEAR FROM open_date) = | 2005 THEN 1 | ||
_> | ELSE | |||
_> | END) | year_2005 | ||
_> | FROM account | |||
_> | WHERE open_date > '1999_12_31'; |
+___________+___________+___________+___________+___________+___________+ | year_2000 | year_2001 | year_2002 | year_2003 | year_2004 | year_2005 | +___________+___________+___________+___________+___________+___________+
| | 3 | | 4 | | 5 | | 3 | | 9 | | 0 | |
+___________+___________+___________+___________+___________+___________+ 1 row in set (0.01 sec)
Все шесть выражений для столбцов предыдущего запроса идентичны, за исключением значения года. Когда функция extract() возвращает нужный год, выражение case возвращает значение 1. В противном слу_ чае возвращается 0. Суммируя все счета, открытые с 2000 года, каж_ дый столбец возвращает число счетов, открытых в соответствующий год. Очевидно, что такие трансформации практически применимы только для небольшого числа значений. Решение задачи по формиро_ ванию столбцов для каждого года, начиная с 1905_го, быстро стало бы слишком громоздким.
Дата добавления: 2015-08-17; просмотров: 42 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Простые выражения case | | | Селективная агрегация |