Агрегаттык функциялар бир катар скалярдык маанилерди эсептейт. MySQL төмөнкү агрегаттык функцияларга ээ:
AVG : Орточо маанини эсептейт
SUM : Маанилердин суммасын эсептейт
MIN : Эң кичине маанини эсептейт
MAX : Эң чоң маанини эсептейт
COUNT : Суроодогу саптардын санын эсептейт
Бардык агрегаттык функциялар параметр катары маанилерди аныктоонун критерийин билдирген туюнтманы алышат. Көбүнчө, туюнтма маанилери эсептелиши керек болгон тилкенин аталышы болуп саналат.
AVG жана SUM функцияларындагы туюнтмалар сандык маанини көрсөтүүсү керек (мисалы, сандык маанилерди сактаган тилке). MIN , MAX жана COUNT функцияларындагы туюнтма сандык маанини, саптын маанисин же датаны көрсөтө алат.
NULL маанилерден башка бардык агрегаттык функциялар COUNT(*)
этибарга алынбайт.
Avg функциясы таблица тилкелеринин маанилеринин диапазонунун орточо маанисин кайтарат.
Мисалы, төмөнкү продукт таблицасы бар болсун Продукциялар:
@A@
CREATE
TABLE
Products
(
Id
INT
AUTO_INCREMENT
PRIMARY
KEY
,
ProductName
VARCHAR
(30)
NOT
NULL
,
Manufacturer
VARCHAR
(20)
NOT
NULL
,
ProductCount
INT
DEFAULT
0,
Price
DECIMAL
NOT
NULL
);
INSERT
INTO
Products(ProductName, Manufacturer, ProductCount, Price)
VALUES
(
'iPhone X'
,
'Apple'
, 3, 76000),
(
'iPhone 8'
,
'Apple'
, 2, 51000),
(
'iPhone 7'
,
'Apple'
, 5, 32000),
(
'Galaxy S9'
,
'Samsung'
, 2, 56000),
(
'Galaxy S8'
,
'Samsung'
, 1, 46000),
(
'Honor 10'
,
'Huawei'
, 5, 28000),
(
'Nokia 8'
,
'HMD Global'
, 6, 38000)
@A@
Маалыматтар базасынан товарлардын орточо баасын табалы:
@A@
SELECT
AVG
(Price)
AS
Average_Price
FROM
Products
@A@
Орточо маанини табуу үчүн Баа тилкеси функцияга туюнтма катары өткөрүлөт. Натыйжадагы маани Орто_Баа лакап атына коюлат, бирок негизи ал лакап ат коюунун кереги жок.
Үлгү алуу баскычында сиз чыпкалоону колдоно аласыз. Мисалы, белгилүү бир өндүрүүчүнүн товарларынын орточо баасын табалы:
@A@
SELECT
AVG
(Price)
FROM
Products
WHERE
Manufacturer=
'Apple'
@A@
Ошондой эле татаал туюнтмалар үчүн орточо таба аласыз. Мисалы, алардын санын эсепке алуу менен бардык товарлардын орточо суммасын табалы:
SELECT
AVG
(Price * ProductCount)
FROM
Products
Count функциясы үлгүдөгү саптардын санын эсептейт. Бул функциянын эки формасы бар. Биринчи форма COUNT(*)
тандоодогу саптардын санын эсептейт:
SELECT
COUNT
(*)
FROM
Products
@A@
Функциянын экинчи формасы белгилүү бир тилке үчүн саптардын санын эсептейт жана NULL маанилери бар саптар этибарга алынбайт:
SELECT
COUNT
(Manufacturer)
FROM
Products
@A@
Мин жана Макс функциялары мамычанын минималдуу жана максималдуу маанилерин эсептейт. Мисалы, товарлардын ичинен минималдуу бааны табалы:
@A@
SELECT
MIN
(Price),
MAX
(Price)
FROM
Products
@A@
Бул функциялар ошондой эле NULL маанилерине көңүл бурбайт жана аларды эсептөөдө эске албайт.
Sum функциясы мамычанын маанилеринин суммасын эсептейт. Мисалы, товарлардын жалпы санын эсептеп көрөлү:
@A@
SELECT
SUM
(ProductCount)
FROM
Products
@A@
Ошондой эле, тилке аталышынын ордуна, эсептелген туюнтма өткөрүлүшү мүмкүн. Мисалы, бардык жеткиликтүү товарлардын жалпы наркын табалы:
SELECT
SUM
(ProductCount * Price)
FROM
Products
Демейки боюнча, жогорудагы беш функциянын бардыгы жыйынтыкты эсептөө үчүн үлгүдөгү бардык саптарды эске алат. Бирок тандоо дубликат маанилерди камтышы мүмкүн. Эгерде маанилердин топтомунан кайталанган маалыматтарды кошпогондо, уникалдуу маанилер боюнча гана эсептөөлөрдү жүргүзүү зарыл болсо, анда бул үчүн DISTINCT оператору колдонулат .
SELECT
COUNT
(
DISTINCT
Manufacturer)
FROM
Products
@A@
Демейки боюнча, DISTINCT ордуна, ALL оператору колдонулат , ал бардык саптарды тандайт:
@A@
SELECT
COUNT
(
ALL
Manufacturer)
FROM
Products
@A@
Бул учурда, биз кээ бир продуктылар бир эле өндүрүүчүлөргө ээ болушу мүмкүн болгондуктан, өндүрүүчүлөр, таблицада кайталанышы мүмкүн экенин көрөбүз. Ошондуктан, уникалдуу өндүрүүчүлөрдүн санын эсептөө үчүн DISTINCT операторун колдонушуңуз керек.
DISTINCT жок болгондо бул оператор кыйыр болгондуктан, аны өткөрүп жиберүүгө болот.
Келгиле, бир нече функцияларды колдонууну бириктирели:
SELECT
COUNT
(*)
AS
ProdCount,
SUM
(ProductCount)
AS
TotalCount,
MIN
(Price)
AS
MinPrice,
MAX
(Price)
AS
MaxPrice,
AVG
(Price)
AS
AvgPrice
FROM
Products
@A@