Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Сравнение неявных и явных групп

Загрузка данных часового пояса MySQL | Преобразования строки в дату | Функции для создания дат | Временные функции, возвращающие даты | Временные функции, возвращающие строки | Временные функции, возвращающие числа | Функции преобразования | Упражнения | Принципы группировки | Gt; FROM account |


Читайте также:
  1. I - от 19 до 30 лет (2 группа)
  2. I. Группа слабоумия
  3. IV. Используя слова из обеих групп, составьте словосочетания.
  4. Lt;question> Назовите способ группировки библиографического списка, который создается по отдельным отраслям знания, вопросам и темам в их логическом соподчинении
  5. Quot; Машинист поезда N….. на ….. пути. Групповой сигнал открыт Вам. Разрешаю отправиться. ДСП….".
  6. А . Подбор экспертов и формирование экспертных групп.
  7. А) определение группы соединения обмоток;

 

В предыдущем примере все значения, возвращаемые по запросу, фор_ мируются агрегатной функцией, а сами агрегатные функции применя_ ются к группе строк, определенной условием фильтрации product_cd =


 

Агрегатные функции  
   

 

'CHK'. Поскольку блок group by отсутствует, имеется единственная не_ явная группа (все возвращенные запросом строки).

 

Однако в большинстве случаев потребуется извлекать и другие столбцы, а не только сформированные агрегатными функциями. Что если, к при_ меру, заставить предыдущий запрос выполнить эти же пять агрегатных функций для каждого типа счетов, а не только для текущих счетов? Для такого запроса пришлось бы извлекать столбец product_cd в дополнение к столбцам, сформированным пятью агрегатными функциями:

 

SELECT product_cd,

 

MAX(avail_balance) max_balance,

 

MIN(avail_balance) min_balance,

 

AVG(avail_balance) avg_balance,

 

SUM(avail_balance) tot_balance,

 

COUNT(*) num_accounts

 

FROM account;

 

Однако если попытаться выполнить этот запрос, будет получена сле_ дующая ошибка:

 

ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)

 

with no GROUP columns is illegal if there is no GROUP BY clause

 

Хотя для разработчика очевидно, что он хочет применить агрегатные функции к множеству счетов каждого типа, выявленного в таблице account, этот запрос дает сбой, потому что не был явно задан способ груп_ пировки данных. Следовательно, необходимо добавить блок group by и определить в нем группу строк, к которой следует применять агре_ гатные функции:

 

mysql> SELECT product_cd,
_> MAX(avail_balance) max_balance,
_> MIN(avail_balance) min_balance,
_> AVG(avail_balance) avg_balance,
_> SUM(avail_balance) tot_balance,
_> COUNT(*) num_accts
_> FROM account
_> GROUP BY product_cd;

 

+___________+____________+____________+____________+____________+__________+ | product_cd | max_balance | min_balance | avg_balance | tot_balance | num_accts | +___________+____________+____________+____________+____________+__________+

 

| BUS | 9345.55 | 0.00 | 4672.774902 | 9345.55 |   |
| CD | 10000.00 | 1500.00 | 4875.000000 | 19500.00 |   |
| CHK | 38552.05 | 122.37 | 7300.800985 | 73008.01 |   |
| MM | 9345.55 | 2212.50 | 5681.713216 | 17045.14 |   |
| SAV | 767.77 | 200.00 | 463.940002 | 1855.76 |   |
| SBL | 50000.00 | 50000.00 | 50000.000000 | 50000.00 | 1 |

 

+___________+____________+____________+____________+____________+__________+ 6 rows in set (0.00 sec)


 

158 Глава 8. Группировка и агрегаты

Если есть блок group by, сервер знает, что сначала надо сгруппировать строки с одинаковым значением в столбце product_cd, а затем приме_ нить пять агрегатных функций к каждой из шести групп.

 


Дата добавления: 2015-08-17; просмотров: 48 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Агрегатные функции| Gt; FROM account

mybiblioteka.su - 2015-2024 год. (0.006 сек.)