首頁 >資料庫 >mysql教程 >如何在MySQL中計算不同轉換的準確轉換值總和?

如何在MySQL中計算不同轉換的準確轉換值總和?

DDD
DDD原創
2024-11-04 04:20:02223瀏覽

How to Calculate Accurate Sum of Conversion Values for Distinct Conversions in MySQL?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn