Funcțiile de AGREGARE
Funcțiile de agregare calculează anumite valori scalare într-un set de rânduri. În MySQL, există următoarele funcții de agregare:
- AVG: calculează valoarea medie
- SUM: calculează suma valorilor
- MIN: calculează valoarea minimă
- MAX: calculează valoarea maximă
- COUNT: calculează numărul de rânduri în interogare
Toate funcțiile de agregare iau ca parametru o expresie care reprezintă criteriul pentru determinarea valorilor. De multe ori, această expresie este numele coloanei asupra căreia se efectuează calculele.
Expresiile din funcțiile AVG și SUM trebuie să reprezinte o valoare numerică (de exemplu, o coloană care conține valori numerice). Expresia din funcțiile MIN, MAX și COUNT poate reprezenta o valoare numerică, șir sau dată.
Toate funcțiile de agregare, cu excepția COUNT(*), ignoră valorile NULL.
Funcția AVG
Funcția AVG returnează valoarea medie într-un interval de valori dintr-o coloană a unei tabele.
De exemplu, să presupunem că există următoarea tabelă de produse Products:
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)
Vom găsi prețul mediu al produselor din baza de date:
SELECT AVG(Price) AS Average_Price FROM Products
Pentru a calcula valoarea medie, ca expresie în funcție, se transmite coloana Price. Pentru a obține valoarea finală, se stabilește un pseudonim, în acest caz, Average_Price, deși, în principiu, stabilirea unui pseudonim nu este obligatorie:

La etapa de selecție, se poate aplica filtrarea. De exemplu, vom găsi prețul mediu pentru produsele unui anumit producător:
SELECT AVG(Price) FROM Products
WHERE Manufacturer='Apple'
De asemenea, se poate calcula valoarea medie pentru expresii mai complexe. De exemplu, vom găsi suma medie a tuturor produselor, având în vedere cantitatea lor:
SELECT AVG(Price * ProductCount) FROM Products
Funcția COUNT
Funcția COUNT calculează numărul de rânduri din selecție. Există două forme ale acestei funcții. Prima formă, COUNT(*), numără toate rândurile din selecție:
SELECT COUNT(*) FROM Products

A doua formă a funcției calculează numărul de rânduri bazat pe o anumită coloană, iar rândurile cu valori NULL sunt ignorate:
SELECT COUNT(Manufacturer) FROM Products
Funcțiile Min și Max
Funcțiile Min și Max calculează, respectiv, valoarea minimă și maximă pe o coloană. De exemplu, vom găsi prețul minim al produselor:
SELECT MIN(Price), MAX(Price) FROM Products

Aceste funcții ignoră, de asemenea, valorile NULL și nu le iau în considerare la calcul.
Funcția Sum
Funcția Sum calculează suma valorilor dintr-o coloană. De exemplu, vom calcula numărul total de produse:
SELECT SUM(ProductCount) FROM Products
Această interogare va returna suma valorilor din coloana "ProductCount" din tabela "Products", exprimată ca rezultat al funcției SUM.
De asemenea, în locul numelui coloanei, poate fi transmisă o expresie calculată. De exemplu, vom găsi costul total al tuturor produselor disponibile:
SELECT SUM(ProductCount * Price) FROM Products
All și Distinct
În mod implicit, toate cele cinci funcții menționate anterior iau în considerare toate rândurile din selecție pentru calculul rezultatului. Cu toate acestea, selecția poate conține valori duplicate. Dacă doriți să efectuați calcule doar asupra valorilor unice, eliminând datele duplicate din setul de valori, se utilizează operatorul DISTINCT.
SELECT COUNT(DISTINCT Manufacturer) FROM Products
În mod implicit, în loc de DISTINCT, se aplică operatorul ALL, care selectează toate rândurile:
SELECT COUNT(ALL Manufacturer) FROM Products
În acest caz, vedem că producătorii se pot repeta în tabel, deoarece unele produse pot avea aceiași producători. Prin urmare, pentru a număra producătorii unici, este necesar să se utilizeze operatorul DISTINCT.
Deoarece acest operator este implicit atunci când lipsește DISTINCT, nu este necesar să fie specificat.
Combinație de funcții
Vom combina aplicarea mai multor funcții:
SELECT COUNT(*) AS ProdCount,
SUM(ProductCount) AS TotalCount,
MIN(Price) AS MinPrice,
MAX(Price) AS MaxPrice,
AVG(Price) AS AvgPrice
FROM Products