Маалыматты топтоо: GROUP BY жана HAVING
Көп сапты ар бир топ үчүн бир таза сапка айландырабыз
GROUP BY бирдей мааниси бар сапты топторго чогултат, анан агрегатты (мисалы COUNT же SUM) ар бир топ үчүн бир жолу аткарат. Андан кийин HAVING ошол агрегатка карап бүтүн топторду калтырат же алып салат.
GROUP BYменен сап топторун түзө аласыз,- бир агрегат маанисин ар бир топ үчүн ала аласыз (саны, суммасы, орточосу, минимуму, максимуму),
HAVINGаркылуу бүтүн топторду чыпкалай аласыз,WHERE(сапты чыпкалайт) мененHAVING(топторду чыпкалайт) айырмалай аласыз,- топтолбогон жана агрегатталбаган мамычаны тандоо деген классикалык катадан качасыз.
1. "Топтоо" деген эмне?
Таза кийимдин чоң себетин элестетиңиз. Аны жыйыштыруудан мурун сиз аларды үймөккө бөлөсүз: бир үймөк байпак, бир үймөк көйнөк, бир үймөк сүлгү. Эми "канча байпак?" деген суроого жооп берүү оңой, себеби бардык байпак бир үймөктө.
SQLдеги топтоо сапка ушул эле нерсени жасайт. Сиз мамычаны тандайсыз, ошол мамычада бирдей мааниси бар ар бир сап бир эле үймөккө түшөт. Анан ар бир үймөк жөнүндө бир суроону бир учурда бере аласыз: канча? жалпы сумма канча? орточосу канча?
Өткөн сабакта сиз COUNT, SUM, AVG, MIN жана MAX агрегат функцияларын үйрөндүңүз. Өз алдынча алар бүт таблицаны бир санга кысат. GROUP BY ошол санды баарын бирдей эмес, ар бир үймөк үчүн алууга мүмкүндүк берет.
2. Мисал таблицабыз: жаныбарлар дүкөнү
Бүт сабакта биз бир кичинекей таблицаны колдонобуз — сатыкка коюлган жаныбарлардын тизмеси. Ал мына кантип түзүлүп, толтурулат.
CREATE TABLE pets (
id INT PRIMARY KEY,
name VARCHAR(20),
species VARCHAR(10),
age INT,
price DECIMAL(6,2)
);
INSERT INTO pets (id, name, species, age, price) VALUES
(1, 'Rex', 'dog', 3, 200.00),
(2, 'Bella', 'dog', 5, 150.00),
(3, 'Milo', 'cat', 2, 100.00),
(4, 'Luna', 'cat', 4, 120.00),
(5, 'Coco', 'cat', 1, 90.00),
(6, 'Nemo', 'fish', 1, 20.00),
(7, 'Goldie', 'fish', 2, 15.00);
Бүт таблица (SELECT * FROM pets;):
| id | name | species | age | price |
|---|---|---|---|---|
| 1 | Rex | dog | 3 | 200.00 |
| 2 | Bella | dog | 5 | 150.00 |
| 3 | Milo | cat | 2 | 100.00 |
| 4 | Luna | cat | 4 | 120.00 |
| 5 | Coco | cat | 1 | 90.00 |
| 6 | Nemo | fish | 1 | 20.00 |
| 7 | Goldie | fish | 2 | 15.00 |
Байкаңыз: species мамычасы кайталанат — эки ит, үч мышык, эки балык. Дал ушундай кайталанган мамыча топтоо үчүн эң ылайыктуу.