gpt4 book ai didi

mysql - 如果日期列中的值存在于所有 3 个表中,则合并 3 个结构相同的表

转载 作者:行者123 更新时间:2023-11-29 14:43:44 24 4
gpt4 key购买 nike

我有一个 mysql 数据库/服务器,它有 3 个结构相同的表:西部、中西部和东部。

我想创建一个国家表,其中包含这些区域表的列总和,前提是日期时间行与所有 3 个表匹配。这样,如果特定表中缺少一小时,我最终不会对 2 个地区进行求和并将其称为全国。

这是我的想法:

所有 3 个表都有一个日期时间列。

仅当所有 3 个表中都存在日期时间行时才合并表(并集?)。

聚合(求和)按日期时间列分组的列。我当然会对所有带有 int 值的列进行求和。

我不确定如何运行执行此任务的查询。这些表有 1100 万行,因此有效的方法会很棒。我也愿意接受其他方法来解决这个问题。

<小时/>

我从 Neil 那里选择了答案,因为如果 datetime col 不唯一,即 Table1 中的多行具有相同的日期时间,则答案将不起作用。使用任何其他方法,我得到的性能都是可怕的,查询时间长达数小时。我决定妥协。我创建了 3 个新表西部、中西部和南部。这 3 个新表是按小时聚合原始表的结果。然后我使用了尼尔斯的第二个版本,但做了一些改动:

INNER JOIN Table2 USING (datetime)

虽然日期时间在我的表中建立了索引,但它提供了卓越的性能,这对我来说是一个严格的标准。

最佳答案

第一个版本:

SELECT T123.dtcol, SUM(T123.intcol) AS intcolsum
FROM (
SELECT Table1.dtcol, Table1.intcol FROM Table1
UNION
SELECT Table2.dtcol, Table2.intcol FROM Table2
UNION
SELECT Table3.dtcol, Table3.intcol FROM Table3
) T123
GROUP BY T123.dtcol
HAVING COUNT(*) = 3

第二个版本:

SELECT Table1.dtcol, Table1.intcol + Table2.intcol + Table3.intcol AS intcolsum
FROM Table1 T1
INNER JOIN Table2 T2 ON T2.dtcol = T1.dtcol
INNER JOIN Table3 T2 ON T3.dtcol = T1.dtcol

关于mysql - 如果日期列中的值存在于所有 3 个表中,则合并 3 个结构相同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7458148/

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