MYSQL:對唯一行使用sum()
在SQL 查詢中,sum() 函數通常用於計算跨多行的值。但是,在處理分組資料時,必須考慮重複行。在這個特定問題中,使用者的目標是計算轉換表中每個不同行的列 conversions.value 的總和。
提供的查詢最初遇到一個問題,即 sum(conversions.value) 錯誤地計算了由於 GROUP BY 子句,每行的值多次。為了解決這個問題,使用者必須確保只計算唯一行的總和。
解決方案在於利用笛卡爾積的概念,它結合了多個集合的元素。在本例中,這些集合是唯一的點擊和轉換事件。 count(DISTINCT conversions.id) 函數有效刪除重複的轉換行,提供唯一轉換事件的計數。
要計算正確的總和,使用者可以將 sum(conversions.value) 乘以不同的計數轉換並將其除以總行數 (count(*))。此操作可確保僅針對與每個連結關聯的唯一轉換事件計算總和。
解決方案中建議的修改查詢是:
<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>
以上是如何計算分組 SQL 查詢中唯一行的列總和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!