MYSQL: Menggunakan sum() untuk Baris Unik
Dalam pertanyaan SQL, fungsi sum() biasanya digunakan untuk mengira jumlah nilai merentas berbilang baris. Walau bagaimanapun, apabila bekerja dengan data terkumpul, adalah penting untuk mempertimbangkan baris pendua. Dalam soalan khusus ini, pengguna menyasarkan untuk mengira jumlah lajur conversions.value untuk setiap baris yang berbeza dalam jadual penukaran.
Pertanyaan yang diberikan pada mulanya menghadapi isu di mana jumlah(conversions.value) tersalah mengira nilai untuk setiap baris berbilang kali disebabkan oleh klausa GROUP BY. Untuk menangani perkara ini, pengguna mesti memastikan jumlah dikira hanya untuk baris unik.
Penyelesaian terletak pada penggunaan konsep produk Cartesian, yang menggabungkan elemen berbilang set. Dalam kes ini, set ialah peristiwa klik dan penukaran yang unik. Fungsi count(DISTINCT conversions.id) secara berkesan mengalih keluar baris penukaran pendua, memberikan kiraan peristiwa penukaran unik.
Untuk mengira jumlah yang betul, pengguna boleh mendarabkan jumlah(conversions.value) dengan kiraan berbeza penukaran dan bahagikannya dengan jumlah kiraan baris (count(*)). Operasi ini memastikan jumlah dikira hanya untuk peristiwa penukaran unik yang dikaitkan dengan setiap pautan.
Pertanyaan diubah suai yang disyorkan dalam penyelesaian ialah:
<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>
Atas ialah kandungan terperinci Bagaimana untuk Mengira Jumlah Lajur untuk Baris Unik dalam Pertanyaan SQL Berkumpulan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!