Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengira SUM dengan Tepat daripada Berbilang Jadual dalam SQL?

Bagaimanakah Saya Boleh Mengira SUM dengan Tepat daripada Berbilang Jadual dalam SQL?

DDD
DDDasal
2024-12-30 11:43:15894semak imbas

How Can I Accurately Calculate SUMs from Multiple Tables in SQL?

Menyoal Berbilang Jadual untuk Pengiraan SUM

Dalam konteks pangkalan data hubungan, adalah perkara biasa untuk memerlukan pengagregatan data merentas berbilang jadual. Ini amat berguna untuk meringkaskan nilai atau mengira jumlah besar. Walau bagaimanapun, adalah penting untuk memahami prinsip ringkasan data untuk memastikan hasil yang tepat.

Satu senario sedemikian berlaku apabila menanyakan dua jadual, AP dan INV, yang berkongsi lajur biasa bernama [PROJEK]. Objektifnya adalah untuk mengembalikan set hasil yang mengandungi PROJECT sebagai kunci utama dan dua lajur ringkasan: SUM_AP dan SUM_INV, yang masing-masing mewakili jumlah lajur Nilai untuk setiap projek dalam jadual AP dan INV.

Pendekatan biasa untuk menangani masalah ini ialah menggunakan operasi INNER JOIN, seperti yang dilihat dalam kod berikut:

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]

Walau bagaimanapun, pertanyaan ini mengembalikan hasil yang salah kerana operasi pengumpulan (GROUP BY) digunakan sebelum penjumlahan (SUM). Ini menyebabkan nilai pendua dimasukkan dalam jumlah, yang membawa kepada jumlah yang melambung.

Untuk menyelesaikan isu ini, pendekatan yang lebih tepat ialah menggunakan sub-pilihan untuk melaksanakan pengagregatan secara berasingan bagi setiap jadual:

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]

Pertanyaan yang disemak ini menggunakan sub-pilihan dalam fungsi SUM untuk mengira nilai SUM_AP dan SUM_INV bagi setiap projek. Sub-pilihan secara bebas mengagregatkan lajur Nilai untuk setiap jadual berdasarkan nilai PROJECT yang sepadan, menghapuskan isu nilai pendua.

Dengan menggunakan pendekatan ini, anda boleh membuat pertanyaan berbilang jadual dengan berkesan dan melaksanakan operasi pengagregatan yang tepat untuk mendapatkan hasil ringkasan yang diingini tanpa sebarang pengiraan yang salah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira SUM dengan Tepat daripada Berbilang Jadual dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn