Өнүккөн топтоо: ROLLUP, CUBE жана маалыматты буруу
Жалпак деталдуу сурамды аралык жыйынтыктары, жалпы жыйынтыгы жана бир караганда окулган мамычалары бар отчётко айландырыңыз
Негизги идея: Кадимки
GROUP BY ар бир топко бир сап берет жана андан башка эч нерсе бербейт. Чыныгы отчётторго дагы аралык жыйынтыктар, жалпы жыйынтык жана көбүнчө категориялар үстү жагында мамыча катары жайгашкан маалымат керек. ROLLUP жана CUBE кошумча супер-агрегат саптарын бир өтүүдө түзөт, GROUPING() аларды айырмалоого жол берет, ал эми шарттуу агрегация (SUM(CASE ...)) саптарды мамычаларга бурат. Бул сабакта төрт ыкма тең бириктирилет.
Сабактын аягында сиз:
GROUP BY ... WITH ROLLUPаркылуу аралык жана жалпы жыйынтык саптарын кошо аласыз,- чыныгы NULL менен жыйынтык маркерин айырмалоо жана саптарды белгилөө үчүн
GROUPING()колдоно аласыз, - көп өлчөмдүү жыйынтыктар жөнүндө ой жүгүртүп, ROLLUP та мамычалардын тартиби эмне үчүн маанилүү экенин түшүнөсүз,
- диалект колдогон жерде
CUBE/GROUPING SETSаркылуу толук кайчылаш таблица аласыз жана аны MySQL те эмуляциялайсыз, - шарттуу агрегация менен саптарды мамычаларга бура аласыз.
1. Биздин үлгү схема
Төмөндөгүнүн баары бир кичинекей сатуулар таблицасы менен иштейт. Аны бир жолу түзүп, эсиңизде кармаңыз — бул сабактагы ар бир жыйынтык ушул сегиз саптан алынган.
CREATE TABLE sales (
id INT PRIMARY KEY,
region VARCHAR(20),
product VARCHAR(20),
quarter VARCHAR(2),
amount DECIMAL(10,2)
);
INSERT INTO sales (id, region, product, quarter, amount) VALUES
(1, 'North', 'Widget', 'Q1', 100),
(2, 'North', 'Gadget', 'Q1', 150),
(3, 'North', 'Widget', 'Q2', 120),
(4, 'South', 'Widget', 'Q1', 90),
(5, 'South', 'Gadget', 'Q1', 70),
(6, 'South', 'Gadget', 'Q2', 110),
(7, 'North', 'Gadget', 'Q2', 130),
(8, 'South', 'Widget', 'Q2', 80);
Баштапкы саптар:
| id | region | product | quarter | amount |
|---|---|---|---|---|
| 1 | North | Widget | Q1 | 100 |
| 2 | North | Gadget | Q1 | 150 |
| 3 | North | Widget | Q2 | 120 |
| 4 | South | Widget | Q1 | 90 |
| 5 | South | Gadget | Q1 | 70 |
| 6 | South | Gadget | Q2 | 110 |
| 7 | North | Gadget | Q2 | 130 |
| 8 | South | Widget | Q2 | 80 |
Жалпы сатуу 850 ге барабар. Бул санды эстеп калыңыз: төмөндөгү ар бир ROLLUP жана CUBE тин жалпы жыйынтыгы дал ушуну кайра чыгарууга тийиш.