Терезе функциялары: OVER, PARTITION BY жана рейтинг
Байланышкан саптардын үстүнөн ар бир сап боюнча аналитиканы эсептейбиз - аларды жыйнап салбай.
Негизги идея: Терезе функциясы эсептөөнү терезе - учурдагы сапка байланышкан саптардын жыйындысы - үстүнөн аткарат жана ар бир сапка бирден маани кайтарат, бардык баштапкы саптарды көрүнүктүү сактап. Бул
GROUP BY дегенден негизги айырма, анткени GROUP BY көп сапты бирге жыйнайт. Терезе функциялары аналитикалык SQL негизи: рейтингдер, топ-N ар бир топто, өсүп бараткан жыйынтыктар жана жылма орточолор ушул жерден башталат.
Аягында сиз:
- терезе моделин
GROUP BYдегенден кантип айырмаланарын түшүндүрө аласыз; OVER(...)конструкциясынын түзүлүшүн окуй аласыз;PARTITION BYаркылуу дайындарды топторго бөлө аласыз;ROW_NUMBER,RANKжанаDENSE_RANKортосунан туура тандай аласыз;NTILE(n)аркылуу саптарды кутучаларга бөлө аласыз;- ар бир топто топ-N маселесин таза чече аласыз.
0. Мисал схема
Төмөнкү ар бир суроо-талап бир кичине сатуулар таблицасынын үстүнөн иштейт. Ар бир сап - региондо сатуучу жапкан бир бүтүм.
CREATE TABLE sales (
id INT PRIMARY KEY,
region VARCHAR(20),
salesperson VARCHAR(30),
amount DECIMAL(10,2)
);
INSERT INTO sales (id, region, salesperson, amount) VALUES
(1, 'North', 'Alice', 5000),
(2, 'North', 'Bob', 5000),
(3, 'North', 'Carol', 3000),
(4, 'South', 'Dan', 7000),
(5, 'South', 'Eve', 4000),
(6, 'South', 'Frank', 4000),
(7, 'West', 'Grace', 6000),
(8, 'West', 'Heidi', 2000);
Атайын дал келүүлөргө көңүл буруңуз: Alice менен Bob экөө тең 5000 жапты; Eve менен Frank экөө тең 4000 жапты. Так ушул дал келүүлөрдө үч рейтинг функциясы башкача иштейт.