MySQL агрегатні функції


Агрегатні функції обчислюють деякі скалярні значення в наборі рядків. В MySQL є наступні агрегатні функції:

  • AVG : обчислює середнє значення

  • SUM : обчислює суму значень

  • MIN : обчислює найменше значення

  • MAX : обчислює найбільше значення

  • COUNT : обчислює кількість рядків в запиті

Всі агрегатні функції приймають в якості параметра вираз, який представляє критерій для визначення значень. Найчастіше, в якості виразу виступає назва стовпчика, над значеннями якого треба проводити обчислення.

Вирази в функціях AVG і SUM має представляти числове значення (наприклад, стовпець, який зберігає числові значення). Вираз у функціях MIN , MAX і COUNT може представляти числове або строкове значення або дату.

Всі агрегатні функції за винятком COUNT(*) ігнорують значення NULL .


Avg

Функція Avg повертає середнє значення на діапазоні значень стовпця таблиці.

Наприклад, нехай є наступна таблиця товарів 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);

Знайдемо середню ціну товарів з бази даних:

SELECT AVG(Price) AS Average_Price FROM Products

Для пошуку середнього значення в якості виразу в функцію передається стовпець Price . Для одержуваного значення встановлюється псевдонім Average_Price , хоча в принципі встановлювати псевдонім необов'язково.

На етапі вибірки можна застосовувати фільтрацію. Наприклад, знайдемо середню ціну для товарів певного виробника:

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

Також можна знаходити середнє значення для більш складних виразів. Наприклад, знайдемо середню суму всіх товарів, з огляду на їх кількість:

SELECT AVG(Price * ProductCount) FROM Products

Count

Функція Count обчислює кількість рядків у вибірці. Є дві форми цієї функції. Перша форма COUNT(*) підраховує число рядків у вибірці:

SELECT COUNT(*) FROM Products

Друга форма функції обчислює кількість рядків за певним стовпцем, при цьому рядки зі значеннями NULL ігноруються:

SELECT COUNT(Manufacturer) FROM Products

Min і Max

Функції Min і Max обчислюють мінімальне і максимальне значення за стовпцем відповідно. Наприклад, знайдемо мінімальну ціну серед товарів:

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

Дані функції також ігнорують значення NULL і не враховують їх при підрахунку. 


Sum

Функція Sum обчислює суму значень стовпця. Наприклад, підрахуємо загальну кількість товарів:

SELECT SUM(ProductCount) FROM Products

Також замість імені стовпця може передаватися обчислюючий вираз. Наприклад, знайдемо загальну вартість всіх наявних товарів:

SELECT SUM(ProductCount * Price) FROM Products

All і Distinct

За замовчуванням всі вищеперелічені п'ять функцій враховують всі рядки вибірки для обчислення результату. Але вибірка може містити повторююче значення. Якщо необхідно виконати обчислення тільки над унікальними значеннями, виключивши з набору значень повторювані дані, то для цього застосовується оператор DISTINCT .

SELECT COUNT(DISTINCT Manufacturer) FROM Products

За замовчуванням замість DISTINCT застосовується оператор ALL , який вибирає всі рядки:

SELECT COUNT(ALL Manufacturer) FROM Products

В даному випадку ми бачимо, що виробники можуть повторюватися в таблиці, так як деякі товари можуть мати одних і тих же виробників. Тому щоб підрахувати кількість унікальних виробників, необхідно використовувати оператор DISTINCT .

Так як цей оператор неявно мається на увазі при відсутності DISTINCT , то його можна не вказувати.


Комбінування функцій

Об'єднаймо застосування декількох функцій:

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

 


Наш партнер:
beta test mp3 playlist downloader