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中文网其他相关文章!