Изучаем sql


SELECT open_emp_id, COUNT(*) how_many



Pdf көрінісі
бет137/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   133   134   135   136   137   138   139   140   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )

SELECT open_emp_id, COUNT(*) how_many
> FROM account


Принципы группировки
155
> GROUP BY open_emp_id;
+++
| open_emp_id | how_many |
+++
| 1 | 8 |
| 10 | 7 |
| 13 | 3 |
| 16 | 6 |
+++
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
> FROM account
> GROUP BY open_emp_id


Достарыңызбен бөлісу:
1   ...   133   134   135   136   137   138   139   140   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет