Pengagregatan Baris tersendiri dalam MySQL dengan sum()
Pertanyaan SQL selalunya melibatkan fungsi agregat seperti sum() untuk mengira ringkasan berangka. Apabila berurusan dengan data terkumpul, adalah penting untuk mengira setiap rekod unik sekali sahaja untuk mengelakkan hasil yang melambung.
Pertimbangkan pertanyaan berikut:
<code class="sql">SELECT links.id, count(DISTINCT stats.id) as clicks, count(DISTINCT conversions.id) as conversions, sum(conversions.value) 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;</code>
Matlamatnya adalah untuk mengira bilangan klik yang berbeza , penukaran dan jumlahkan nilai penukaran yang sepadan untuk setiap pautan. Walau bagaimanapun, pengagregatan jumlah(conversions.value) mengira setiap nilai penukaran beberapa kali disebabkan oleh pengumpulan.
Untuk mengira jumlah yang tepat bagi setiap penukaran unik, kami perlu melaraskan ungkapan. Dengan mengandaikan bahawa conversions.id ialah kunci utama dalam jadual penukaran, kami boleh memanfaatkan hubungan antara bilangan penukaran yang berbeza dan jumlah bilangan rekod.
Untuk setiap conversions.id, terdapat paling banyak satu pautan .id terjejas. Oleh itu, jumlah semua nilai penukaran untuk penukaran yang berbeza boleh dikira dengan mendarabkan jumlah sebenar(conversions.value) dengan bilangan penukaran yang berbeza dan membahagikannya dengan jumlah bilangan rekod dalam kumpulan:
<code class="sql">sum(conversions.value) * count(DISTINCT conversions.id) / count(*)</code>
Menggabungkan pelarasan ini ke dalam pertanyaan menghasilkan:
<code class="sql">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;</code>
Pertanyaan yang diubah suai ini secara berkesan menjumlahkan nilai penukaran untuk setiap penukaran unik, memberikan hasil agregat yang tepat untuk data terkumpul.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Jumlah Tepat Nilai Penukaran untuk Penukaran Berbeza dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!