MySQL / COUNT, SUM, AVG, MIN, MAX

COUNT, SUM, AVG, MIN, MAX

Aggregate функц нь олон мөрийн утгыг нэгтгэж, нэг үр дүн буцаадаг. Тайлан, статистик, дүн гаргахад зайлшгүй хэрэглэгддэг.

Жишээ хүснэгт

sql
CREATE TABLE orders (
  id       INT PRIMARY KEY AUTO_INCREMENT,
  customer TEXT NOT NULL,
  product  TEXT NOT NULL,
  amount   DECIMAL(10,2),
  quantity INT
);

INSERT INTO orders (customer, product, amount, quantity) VALUES
  ('Болд',   'Ном',       15000,  2),
  ('Оюун',   'Дэвтэр',     3500,  5),
  ('Болд',   'Үзэг',       1200, 10),
  ('Дорж',   'Ном',       15000,  1),
  ('Оюун',   'Ном',       15000,  3),
  ('Дорж',   'Дэвтэр',     3500,  4),
  ('Болд',   NULL,         NULL, NULL);

COUNT — мөр тоолох

sql
-- Нийт мөрийн тоо (NULL орно)
SELECT COUNT(*) FROM orders;
-- Үр дүн: 7

-- Тодорхой багананы NULL биш утгын тоо
SELECT COUNT(amount) FROM orders;
-- Үр дүн: 6  (NULL орсон мөр тоологдохгүй)

-- Давхардлыг арилгаж тоолох
SELECT COUNT(DISTINCT product) FROM orders;
-- Үр дүн: 3  (Ном, Дэвтэр, Үзэг)

COUNT(*) vs COUNT(column) ялгаа

| | COUNT(*) | COUNT(column) | | -------- | --------- | --------------- | | NULL мөр | Тоолно | Тоологдохгүй | | Хурд | Хурдан | Аргаас хамаарна | | Хэрэглээ | Нийт мөр | Бөглөгдсөн утга |

SUM — нийлбэр

sql
-- Нийт орлого
SELECT SUM(amount) FROM orders;
-- Үр дүн: 53200

-- Нийт тоо хэмжээ
SELECT SUM(quantity) FROM orders;
-- Үр дүн: 25

SUM() нь NULL утгыг алгасдаг — тэгтэй нэмдэггүй.

AVG — дундаж

sql
-- Захиалгын дундаж үнэ
SELECT AVG(amount) FROM orders;
-- Үр дүн: 8866.67  (NULL мөрийг оруулалгүй)

-- Хоёр оронтой тэгш утга
SELECT ROUND(AVG(amount), 2) FROM orders;

AVG() нь NULL утгыг тоолоход ч, нийлбэрт ч оруулдаггүй. Тиймээс NULL байгаа бол дундаж бодит бус байж болно — анхаарах хэрэгтэй.

MIN ба MAX — хамгийн бага, их

sql
-- Хамгийн хямд бараа
SELECT MIN(amount) FROM orders;
-- Үр дүн: 1200

-- Хамгийн үнэтэй бараа
SELECT MAX(amount) FROM orders;
-- Үр дүн: 15000

-- Текст баганад ч ажиллана (цагбайны дарааллаар)
SELECT MIN(customer), MAX(customer) FROM orders;
-- Үр дүн: Болд, Оюун

Хэд хэдэн aggregate нэгэн зэрэг

sql
SELECT
  COUNT(*)           AS нийт_захиалга,
  COUNT(amount)      AS бөглөгдсөн,
  SUM(amount)        AS нийт_орлого,
  ROUND(AVG(amount), 0) AS дундаж,
  MIN(amount)        AS хамгийн_бага,
  MAX(amount)        AS хамгийн_их
FROM orders;

NULL утгыг зохицуулах

sql
-- NULL байвал 0 гэж тооцох
SELECT SUM(COALESCE(amount, 0)) FROM orders;

-- NULL байвал 'Тодорхойгүй' гэж харуулах
SELECT customer, IFNULL(product, 'Тодорхойгүй') AS бараа
FROM orders;

COALESCE(утга, өөр_утга) — эхний NULL биш утгыг буцаана. IFNULL(утга, өөр_утга) — зөвхөн хоёр аргументтай богино хувилбар.

Дараагийн хичээлд:

GROUP BY ашиглан aggregate функцийг бүлгүүдэд хэрэглэх, HAVING нөхцөлийг ашиглах аргыг үзнэ.