gpt4 book ai didi

sql - MySQL - 将表连接到自身,但保留原始结果

转载 作者:行者123 更新时间:2023-11-29 14:55:37 25 4
gpt4 key购买 nike

我有以下查询:

   SELECT a.`graph_value_id`, 
SUM( a.`value` ) AS value,
DATE( DATE_ADD( a.`date_time`, INTERVAL 5 DAY ) ) AS date_time
FROM `graph_values` AS a
LEFT JOIN `graph_values` AS b ON ( a.`graph_id` = b.`graph_id` )
WHERE a.`graph_id` = 921
GROUP BY DATE( a.`date_time` )
HAVING date_time >= MIN( b.`date_time` ) AND date_time <= MAX( b.`date_time` )
ORDER BY a.`date_time` DESC

表格如下:

  • graph_value_id(整数)
  • graph_id(整数)
  • 值( float )
  • date_time(日期时间)
  • 创建日期(日期时间)
  • date_updated(时间戳)

如果我删除 LEFT JOIN(以及对它的所有引用),查询的结果是正确的。

我遇到的问题是 ( a.value ) 的总和严重倾斜。

我加入第二个表的唯一原因是这样我可以获得同一组数据的最小和最大日期。

有谁知道我怎样才能做到这一点?

最佳答案

问题在于,您实际上正在从两个表中创建所有匹配的行,并对这些对进行求和,这会给您带来过高的系数。

解决方案:使用一个派生查询来执行求和,使用另一个派生表来获取最小值和最大值,然后连接两个派生表来获取结果。

SELECT T1.graph_id, T1.col1, T1.col2, T2.col1, ...
FROM (
SELECT graph_id, SUM(...) AS total
FROM ...
GROUP BY ...
) T1
JOIN (
SELECT graph_id, MIN(...) AS minfoo, MAX(...) AS maxfoo
FROM ...
GROUP BY ...
) T2
ON T1.graph_id = T2.graph_id

关于sql - MySQL - 将表连接到自身,但保留原始结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4694964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com