首页  >  文章  >  数据库  >  如何在 SQL 中计算某个值的总和,同时确保每行只计算一次?

如何在 SQL 中计算某个值的总和,同时确保每行只计算一次?

Barbara Streisand
Barbara Streisand原创
2024-11-08 05:56:02650浏览

How To Calculate the Sum of a Value in SQL While Ensuring Each Row is Counted Only Once?

在 SQL 中使用 SUM() 对不同值进行分组

在 MySQL 查询中,您想要计算以下值的总和转换表,同时确保每行仅计算一次。为了实现这一点,您需要将 DISTINCT 关键字与 SUM() 函数结合使用。但是,您遇到了重复行导致 SUM() 结果膨胀的问题。

要解决此问题,请考虑表中的主键关系。如果 conversions.id 是 conversions 表的主键,stats.id 是 stats 表的主键,那么每个 conversions.id 对于单个 links.id 都是唯一的。

基于这种理解,您可以重构查询以计算每个不同 conversions.id 的 conversions.value 总和,然后将结果除以每个 links.id 组内的总行数。这将为您提供所需的不同值的总和。

这是修改后的查询:

<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>

此查询应有效计算内每个不同 conversions.id 的 conversions.value 总和每个 links.id 组,确保每行仅计数一次。

以上是如何在 SQL 中计算某个值的总和,同时确保每行只计算一次?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn