”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 SQL 中计算某个值的总和,同时确保每行只计算一次?

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

发布于2024-11-16
浏览:209

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 组内的总行数。这将为您提供所需的不同值的总和。

这是修改后的查询:

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;

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

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3