الأرقام الجارية
الأرقام الجارية هي، بعبارات بسيطة، عندما تُضاف الأرقام إلى بعضها البعض. مثل أن تريد معرفة القيم منذ بداية العام وحتى تاريخه. ربما يكون جمع الأرقام حالة مستخدمة في كثير من الأحيان، لكن الاحتمالات لا تقتصر عليها. يمكنك أيضًا إجراء متوسط متحرك.
في هذه الحالة سنعمل مع مثال منذ بداية العام حتى تاريخه. لنفترض أن لدينا جدول بإيرادات فئة معينة في الشهر.
ea_month id amount ea_year circle_id April 92570 1000 2014 1 April 92571 3000 2014 2 April 92572 2000 2014 3 March 92573 3000 2014 1 March 92574 2500 2014 2 March 92575 3750 2014 3 February 92576 2000 2014 1 February 92577 2500 2014 2 February 92578 1450 2014 3
للحصول على إجمالي الشهر حتى الآن قد تميل إلى استخدام استعلام فرعي مثل الحصول على كل مبلغ الأشهر السابقة من السنة الحالية لمنتجي. إنه يعمل بالفعل، ولكن لكل صف يتم جلبه يتم تنفيذ استعلام فرعي. وهو ما يمكن أن يؤدي بسهولة إلى آلاف الاستعلامات وبالتالي يستغرق وقتًا طويلاً مثل هذا المثال:
select branch_id, net_profit as store_profit, (select sum(net_profit) from store_sales as s2 where s2.city = s1.city) as city_profit, store_profit / city_profit * 100 as store_percentage_of_city_profit from store_sales as s1 order by branch_id; +-----------+--------------+-------------+---------------------------------+ | BRANCH_ID | STORE_PROFIT | CITY_PROFIT | STORE_PERCENTAGE_OF_CITY_PROFIT | |-----------+--------------+-------------+---------------------------------| | 1 | 10000.00 | 25000.00 | 40.00000000 | | 2 | 15000.00 | 25000.00 | 60.00000000 | | 3 | 10000.00 | 19000.00 | 52.63157900 | | 4 | 9000.00 | 19000.00 | 47.36842100 | +-----------+--------------+-------------+---------------------------------+
يوفر Postgres ما يسمى بدالة نافذة تسمى OVER. لذا بلغة أقل طبيعية تخبر بلغة SQL أنك تريد أن يكون لديك مجموع () فوق مجموعة بيانات مقسمة حسب الوقت و/أو المنتج.
SELECT ea_month, id, amount, ea_year, circle_id , sum(amount) OVER (PARTITION BY circle_id ORDER BY ea_year, ea_month) AS cum_amt FROM tbl ORDER BY circle_id, month;
لكي يكون لديك بالفعل سنة حتى تاريخه يجب أن تكون السنة جزءًا من التقسيم، وإلا فستكون على كل الوقت.
سيتم إجراء الحساب لكل صف. لذا، إذا كان الجدول يحتوي على بيانات يومية، ولكن الإخراج مطلوب على أساس شهري، فيجب تجميع البيانات وتلخيصها لكل شهر أولاً، قبل أن تعمل السنة حتى تاريخه على أساس شهري.