MySQL 中不同行的 SUM()
在 MySQL 查询中使用 SUM() 聚合函数时,考虑如何使用 SUM() 至关重要对不同的行进行计数以确保计算准确。在提供的示例中,目标是对不同的转化进行计数并对它们的值求和。
在原始查询中,SUM(conversions.value) 函数由于 GROUP BY 会对每行的值进行多次计数链接.id。为了解决这个问题,我们需要只对不同的 conversions.id 求和 conversions.value。
仔细的分析表明 conversions.id 和 stats.id 都是主键。因此,我们可以假设对于每个 conversions.id,都有一个唯一的 links.id。
为了获得所需的结果,我们可以利用代表点击和转化的两组集合的笛卡尔积。可以使用 count(distinct conversions.id) 导出唯一转化次数。
转化值总和可以通过将其乘以唯一转化次数除以总计数来校正:sum(conversions.id)。 value)count(distinct conversions.id)/count()
合并此修改会产生以下修改后的结果查询:
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;
这个优化的查询有效地消除了 conversion_value 计算中的重复行,确保不同转化的准确总和。
以上是如何在 MySQL 中计算不同行的 SUM()?的详细内容。更多信息请关注PHP中文网其他相关文章!