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

Gt; FROM account. _> where status = 'active' _> group by product_cd

Упражнения | Принципы группировки | Gt; FROM account | Агрегатные функции | Сравнение неявных и явных групп | Gt; FROM account | Использование выражений | Обработка значений Null | Группировка по нескольким столбцам | Gt; SUM(avail_balance) tot_balance _> FROM account |


Читайте также:
  1. Answer the following questions using your own words but taking into account the
  2. FROM account
  3. Gt; FROM account
  4. Gt; FROM account
  5. Gt; FROM account
  6. Gt; FROM account

 

_> WHERE status = 'ACTIVE' _> GROUP BY product_cd

_> HAVING SUM(avail_balance) >= 10000;

 

+____________+______________+ | product_cd | prod_balance | +____________+______________+

 

| CD | 19500.00 |
| CHK | 73008.01 |
| MM | 17045.14 |
| SBL | 50000.00 |

 

+____________+______________+ 4 rows in set (0.00 sec)

 

В этом запросе два условия фильтрации: одно в блоке where (отсеивают_ ся неактивные счета), а второе в блоке having (отсеиваются счета всех типов с общим доступным остатком меньше 10 000 долларов). Таким образом, один из фильтров воздействует на данные до группировки, а другой – после создания групп. Если по ошибке оба фильтра помеще_ ны в блок where, возникает следующая ошибка:

 

mysql> SELECT product_cd, SUM(avail_balance) prod_balance
_> FROM account
_> WHERE status = 'ACTIVE'
_> AND SUM(avail_balance) > 10000
_> GROUP BY product_cd;

 

ERROR 1111 (HY000): Invalid use of group function

 

Данный запрос дал сбой, потому что агрегатную функцию нельзя включать в блок where. Причина в том, что фильтры блока обрабатыва_ ются до выполнения группировки, поэтому серверу еще не доступны какие_либо действия над группами.

 

При введении фильтров в запрос, включающий блок group by, не_ обходимо тщательно продумать, к чему применяется фильтр –

к необработанным данным (тогда он относится к блоку where) или к сгруппированным данным (в этом случае он относится

 

к блоку having).

 

Однако в блок having можно включить агрегатные функции, не пере_ численные в блоке select, как показано ниже:

 

mysql> SELECT product_cd, SUM(avail_balance) prod_balance
_> FROM account
_> WHERE status = 'ACTIVE'
_> GROUP BY product_cd
_> HAVING MIN(avail_balance) >= 1000
_> AND MAX(avail_balance) <= 10000;

 

Упражнения  
   

 

+____________+______________+ | product_cd | prod_balance | +____________+______________+ | MM | 17045.14 | +____________+______________+ 1 row in set (0.01 sec)

 

Этот запрос формирует общие остатки для каждого типа счетов, но ус_ ловие фильтрации блока having исключает все группы, минимальный остаток которых меньше 1000 долларов или максимальный остаток которых больше 10 000 долларов.

 


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


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

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