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