Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira SUM() untuk Baris Berbeza dalam MySQL?
SUM() untuk Distinct Rows dalam MySQL
Apabila menggunakan fungsi pengagregatan SUM() dalam pertanyaan MySQL, adalah penting untuk mempertimbangkan bagaimana baris yang berbeza dikira untuk memastikan pengiraan yang tepat. Dalam contoh yang diberikan, matlamatnya ialah untuk mengira penukaran yang berbeza dan menjumlahkan nilainya.
Dalam pertanyaan asal, fungsi SUM(conversions.value) mengira nilai untuk setiap baris berbilang kali disebabkan oleh GROUP BY pada pautan.id. Untuk menyelesaikan masalah ini, kita perlu menjumlahkan conversions.value hanya untuk conversions.id yang berbeza.
Analisis yang teliti mendedahkan bahawa kedua-dua conversions.id dan stats.id adalah kunci utama. Oleh itu, kita boleh mengandaikan bahawa bagi setiap conversions.id, terdapat pautan.id yang unik.
Untuk mendapatkan hasil yang diingini, kita boleh memanfaatkan produk Cartesian bagi dua set yang mewakili klik dan penukaran. Bilangan penukaran unik boleh diperoleh menggunakan count(distinct conversions.id).
Jumlah nilai penukaran boleh dibetulkan dengan mendarabkannya dengan bilangan penukaran unik dibahagikan dengan jumlah kiraan: sum(penukaran. value)count(distinct conversions.id)/count()
Menggabungkan pengubahsuaian ini menghasilkan pertanyaan semakan berikut:
SELECT links.id, count(DISTINCT stats.id) as clicks, count(DISTINCT conversions.id) as conversions, sum(conversions.value)*count(DISTINCT conversions.id)/count(*) as conversion_value FROM links LEFT OUTER JOIN stats ON links.id = stats.parent_id LEFT OUTER JOIN conversions ON links.id = conversions.link_id GROUP BY links.id ORDER BY links.created desc;
Pertanyaan yang diperhalusi ini secara berkesan menghapuskan baris pendua dalam pengiraan conversion_value, memastikan jumlah yang tepat untuk penukaran yang berbeza.
Atas ialah kandungan terperinci Bagaimana untuk Mengira SUM() untuk Baris Berbeza dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!