首页 >数据库 >mysql教程 >如何在MySQL中计算不同转换的准确转换值总和?

如何在MySQL中计算不同转换的准确转换值总和?

DDD
DDD原创
2024-11-04 04:20:02192浏览

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