如何在mysql中对不同的子表求和?

pes8fvy9  于 2022-12-26  发布在  Mysql
关注(0)|答案(1)|浏览(152)
    • 数据**

存在多个格式为dm_ym_file_2022XXXX(日期)的表,开始日期为20220720,结束日期为20221220

dm_ym_file_20220720
dm_ym_file_20220721
……
dm_ym_file_20221220

dm_ym_file_rules存储所有名称。dm_ym_file_rules如下所示:

ID  start_date  end_date    table_names
    36  2022-07-20  2022-07-20  dm_ym_file_share_20220720
    37  2022-07-21  2022-07-21  dm_ym_file_share_20220721
    38  2022-07-22  2022-07-22  dm_ym_file_share_20220722
    • 目标**

我想将所有这些表中的一些字段分组到一个表中。

insert into target_table
select a,b,c,sum(d)
from
(
select a,b,c,sum(d)
dm_ym_file_20220720
group by 1,2,3
union all
select a,b,c,sum(d)
dm_ym_file_20220721
group by 1,2,3
union all
……
select a,b,c,sum(d)
dm_ym_file_20221220
group by 1,2,3
) a
group by 1,2,3;

我的代码应该列出所有的表。这很不方便。

dgiusagp

dgiusagp1#

这里应该使用的模式是首先联合源表,然后在外部聚合一次。

INSERT INTO target_table (c1, c2, c3, c4)  -- best to specify target columns here
SELECT a, b, c, SUM(d)
FROM
(
    SELECT a, b, c, d FROM dm_ym_file_20220720
    UNION ALL
    SELECT a, b, c, d FROM dm_ym_file_20220721
    UNION ALL
    SELECT a, b, c, d FROM dm_ym_file_20221220
) t
GROUP BY a, b, c;

请注意,一个更好的长期解决方案可能是重新审视您的数据库设计。您真的需要具有几乎相同结构的单独表吗?只使用一个表可能更有意义,该表具有对应于年/月日期的附加列。

相关问题