MySQL 中使用 sum() 進行獨特的行聚合
SQL 查詢通常涉及 sum() 等聚合函數來計算數值摘要。處理分組資料時,必須僅對每個唯一記錄進行一次計數,以避免結果膨脹。
考慮以下查詢:
<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>
目標是計算不同點擊的數量、轉換次數,並對每個連結對應的轉換值求和。但是,由於分組,sum(conversions.value) 聚合會對每個轉換值進行多次計數。
為了精確計算每個唯一轉換的總和,我們需要調整表達式。假設 conversions.id 是轉換錶中的主鍵,我們可以利用不同轉換次數與記錄總數之間的關係。
對於每個 conversions.id,最多有一個連結.id 受到影響。因此,一次非重複轉換的所有轉換值的總和可以透過將實際總和(conversions.value) 乘以非重複轉換次數並除以群組中的記錄總數來計算:
<code class="sql">sum(conversions.value) * count(DISTINCT conversions.id) / count(*)</code>
將此調整合併到查詢結果中:
<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>
此修改後的查詢有效地對每個唯一轉換的轉換值進行求和,為分組資料提供準確的聚合結果。
以上是如何在MySQL中計算不同轉換的準確轉換值總和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!