Читайте также: |
|
Принципы группировки | |
_> GROUP BY open_emp_id; | |
+_____________+__________+ |
| open_emp_id | how_many | +_____________+__________+
| | | | | | ||
| | | | | | ||
| | | | | | ||
| | | | | |
+_____________+__________+ 4 rows in set (0.00 sec)
Агрегатная функция count() подсчитывает количество строк в каждой группе, а звездочка предписывает серверу сосчитать все строки в груп_ пе. Сочетание блока group by и функции обобщения count() позволяет формировать именно те данные, которые требуются для ответа на при_ кладной вопрос, без необходимости просматривать необработанные данные.
При группировке может понадобиться отфильтровать из результирую_ щего набора ненужные данные, опираясь на информацию групп дан_ ных, а не необработанных данных. Блок group by выполняется после вычисления блока where, поэтому условия фильтрации нельзя добав_ лять в блок where. Вот, например, попытка отфильтровать всех сотруд_ ников, открывших меньше пяти счетов:
mysql> | SELECT open_emp_id, COUNT(*) how_many |
_> | FROM account |
_> | WHERE COUNT(*) > 4 |
_> | GROUP BY open_emp_id, product_cd; |
ERROR 1111 (HY000): Invalid use of group function
Агрегатную функцию count(*) нельзя использовать в блоке where, по_ тому что на момент вычисления блока where группы еще не сформиро_ ваны. Вместо этого можно поместить условия фильтрации группы в блок having. Вот пример того же запроса с блоком having:
mysql> SELECT open_emp_id, COUNT(*) how_many
Дата добавления: 2015-08-17; просмотров: 50 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Принципы группировки | | | Агрегатные функции |