Изучаем sql


> MIN(avail_balance) min_balance



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

> 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
|
2
|
|
CD
|
10000.00
|
1500.00
| 4875.000000
|
19500.00
|
4
|
|
CHK
|
38552.05
|
122.37
| 7300.800985
|
73008.01
|
10
|
|
MM
|
9345.55
|
2212.50
| 5681.713216
|
17045.14
|
3
|
|
SAV
|
767.77
|
200.00
| 463.940002
|
1855.76
|
4
|
|
SBL
|
50000.00
|
50000.00
|
50000.000000
|
50000.00
|
1
|
+++++++
6 rows in set (0.00 sec)


158
Глава 8. Группировка и агрегаты
Если есть блок 
group
by
, сервер знает, что сначала надо сгруппировать
строки с одинаковым значением в столбце 
product_cd
, а затем приме
нить пять агрегатных функций к каждой из шести групп.
Подсчет уникальных значений
При использовании функции 
count()
для определения числа членов
в каждой группе существует выбор: или пересчитать 
все
члены груп
пы, или посчитать только 
уникальные 
(
distinct
) значения столбца из
всех членов группы. Рассмотрим, например, следующие данные, кото
рыми представлены сотрудники, ответственные за открытие каждого
счета:
mysql> 
SELECT account_id, open_emp_id
> FROM account
> ORDER BY open_emp_id;
+++
| account_id | open_emp_id |
+++
| 8 | 1 |
| 9 | 1 |
| 10 | 1 |
| 12 | 1 |
| 13 | 1 |
| 17 | 1 |
| 18 | 1 |
| 19 | 1 |
| 1 | 10 |
| 2 | 10 |
| 3 | 10 |
| 4 | 10 |
| 5 | 10 |
| 14 | 10 |
| 22 | 10 |
| 6 | 13 |
| 7 | 13 |
| 24 | 13 |
| 11 | 16 |
| 15 | 16 |
| 16 | 16 |
| 20 | 16 |
| 21 | 16 |
| 23 | 16 |
+++
24 rows in set (0.00 sec)
Как видите, все множество счетов было открыто четырьмя разными
сотрудниками (с ID = 1, 10, 13 и 16). Допустим, хочется подсчитать
число открывших счета сотрудников – не вручную, а с помощью за
проса. Если к столбцу 
open_emp_id
применить функцию 
count()
, увидим
следующие результаты:


Агрегатные функции
159
mysql> 
SELECT COUNT(open_emp_id)
> FROM account;
++
| COUNT(open_emp_id) |
++
| 24 |
++
1 row in set (0.00 sec)
В этом случае столбец 
open_emp_id
задан как столбец, который должен
быть пересчитан. При этом полученный результат ничем не отличает
ся от результата выполнения функции 
count(*)
. Если требуется под
считать 
уникальные 
значения в группе, а не просто пересчитать число
строк в ней, нужно указать ключевое слово 
distinct
:
mysql> 
SELECT COUNT(DISTINCT open_emp_id)
> FROM account;
++
| COUNT(DISTINCT open_emp_id) |
++
| 4 |
++
1 row in set (0.00 sec)
Следовательно, если задано ключевое слово 
distinct
, функция 
count()
проверит значение столбца для каждого члена группы, а не просто
подсчитает число значений в ней.


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




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

    Басты бет