Pengagregatan Pangkalan Data merentas Berbilang Jadual: Membetulkan Pengiraan Jumlah
Apabila berurusan dengan berbilang jadual dalam pangkalan data, fungsi pengagregatan seperti SUM memerlukan pengendalian yang teliti untuk memastikan keputusan yang tepat. Ini dicontohkan oleh pertanyaan yang cuba mengira jumlah nilai daripada dua jadual, AP dan INV, kedua-duanya mempunyai lajur [PROJECT] dan [Value]. Output yang diingini sepatutnya menyerupai:
PROJECT | SUM_AP | SUM_INV
Walau bagaimanapun, pertanyaan yang diberikan mempamerkan hasil yang salah disebabkan ralat dalam penjumlahan:
SELECT AP.[PROJECT], SUM(AP.Value) AS SUM_AP, SUM(INV.Value) AS SUM_INV FROM AP INNER JOIN INV ON (AP.[PROJECT] =INV.[PROJECT]) WHERE AP.[PROJECT] = 'XXXXX' GROUP BY AP.[PROJECT]
Isunya terletak pada pengumpulan nilai. Klausa GROUP BY menggabungkan nilai pendua, yang membawa kepada jumlah yang salah.
Untuk membetulkannya, sub-pilihan boleh digunakan:
SELECT AP1.[PROJECT], (SELECT SUM(AP2.Value) FROM AP AS AP2 WHERE AP2.PROJECT = AP1.PROJECT) AS SUM_AP, (SELECT SUM(INV2.Value) FROM INV AS INV2 WHERE INV2.PROJECT = AP1.PROJECT) AS SUM_INV FROM AP AS AP1 INNER JOIN INV AS INV1 ON (AP1.[PROJECT] =INV1.[PROJECT]) WHERE AP1.[PROJECT] = 'XXXXX' GROUP BY AP1.[PROJECT]
Pendekatan ini mengira jumlah secara berasingan bagi setiap [PROJEK ] menggunakan sub-pilihan, menghasilkan pengagregatan yang tepat.
Atas ialah kandungan terperinci Bagaimana untuk Mengagregat Nilai SUM Dengan Betul Merentasi Pelbagai Jadual Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!