Loading...

Функцияларды бириктирүү

Агрегаттык функциялар бир катар скалярдык маанилерди эсептейт. 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@

Орточо маанини табуу үчүн Баа тилкеси функцияга туюнтма катары өткөрүлөт. Натыйжадагы маани Орто_Баа лакап атына коюлат, бирок негизи ал лакап ат коюунун кереги жок.

avg функциясы жана MySQLде орточо маанини табуу

Үлгү алуу баскычында сиз чыпкалоону колдоно аласыз. Мисалы, белгилүү бир өндүрүүчүнүн товарларынын орточо баасын табалы:

@A@

SELECT AVG(Price) FROM Products
WHERE Manufacturer='Apple'
@A@
 

Ошондой эле татаал туюнтмалар үчүн орточо таба аласыз. Мисалы, алардын санын эсепке алуу менен бардык товарлардын орточо суммасын табалы:

@A@
SELECT AVG(Price * ProductCount) FROM Products
@A@

Сан

Count функциясы үлгүдөгү саптардын санын эсептейт. Бул функциянын эки формасы бар. Биринчи форма COUNT(*)тандоодогу саптардын санын эсептейт:

@A@
SELECT COUNT(*) FROM Products
@A@

MySQLдеги Count функциясы жана саптардын санын эсептөө

Функциянын экинчи формасы белгилүү бир тилке үчүн саптардын санын эсептейт жана NULL маанилери бар саптар этибарга алынбайт:

@A@
SELECT COUNT(Manufacturer) FROM Products
@A@

Мин жана Макс

Мин жана Макс функциялары мамычанын минималдуу жана максималдуу маанилерин эсептейт. Мисалы, товарлардын ичинен минималдуу бааны табалы:

@A@

SELECT MIN(Price), MAX(Price) FROM Products
@A@

MySQLде MIN жана MAX

Бул функциялар ошондой эле NULL маанилерине көңүл бурбайт жана аларды эсептөөдө эске албайт.

Сум

Sum функциясы мамычанын маанилеринин суммасын эсептейт. Мисалы, товарлардын жалпы санын эсептеп көрөлү:

@A@

SELECT SUM(ProductCount) FROM Products
@A@

Ошондой эле, тилке аталышынын ордуна, эсептелген туюнтма өткөрүлүшү мүмкүн. Мисалы, бардык жеткиликтүү товарлардын жалпы наркын табалы:

@A@
SELECT SUM(ProductCount * Price) FROM Products
@A@

Бардыгы жана айырмаланган

Демейки боюнча, жогорудагы беш функциянын бардыгы жыйынтыкты эсептөө үчүн үлгүдөгү бардык саптарды эске алат. Бирок тандоо дубликат маанилерди камтышы мүмкүн. Эгерде маанилердин топтомунан кайталанган маалыматтарды кошпогондо, уникалдуу маанилер боюнча гана эсептөөлөрдү жүргүзүү зарыл болсо, анда бул үчүн DISTINCT оператору колдонулат .

@A@
SELECT COUNT(DISTINCT Manufacturer) FROM Products
@A@

Демейки боюнча, DISTINCT ордуна, ALL оператору колдонулат , ал бардык саптарды тандайт:

@A@

SELECT COUNT(ALL Manufacturer) FROM Products
@A@

Бул учурда, биз кээ бир продуктылар бир эле өндүрүүчүлөргө ээ болушу мүмкүн болгондуктан, өндүрүүчүлөр, таблицада кайталанышы мүмкүн экенин көрөбүз. Ошондуктан, уникалдуу өндүрүүчүлөрдүн санын эсептөө үчүн DISTINCT операторун колдонушуңуз керек.

DISTINCT жок болгондо бул оператор кыйыр болгондуктан, аны өткөрүп жиберүүгө болот.

Функцияларды айкалыштыруу

Келгиле, бир нече функцияларды колдонууну бириктирели:

@A@
SELECT COUNT(*) AS ProdCount,
       SUM(ProductCount) AS TotalCount,
       MIN(Price) AS MinPrice,
       MAX(Price) AS MaxPrice,
       AVG(Price) AS AvgPrice
FROM Products
@A@