请问一个问题,我有很多张同样类型不同名字的数据库,我可以查出来相关表名,但是表名可能会增加

2020-11-12 10:56:46 +08:00
 GroupF

mysql 5.7

条件:’qy_csb_1‘这些表能查出来,但是并不固定

问题:计算 sum 成为一列

select sum(average) from qy_csb_1 select sum(average) from qy_csb_2 select sum(average) from qy_csb_3
... select sum(average) from qy_csb_n

union 是行不通的,因为我的表名可能随着时间变多, 循环感觉可能行得通,也搜索了相关资料,没太理解。。。

用 java 循环来做也是可行的,但是我并不想用这种方式,可能自己有点钻牛角尖了。。

希望给点思路,谢谢

2653 次点击
所在节点    MySQL
8 条回复
GroupF
2020-11-12 10:57:59 +08:00
排版好像有点问题
select sum(average) from qy_csb_1
select sum(average) from qy_csb_2
select sum(average) from qy_csb_3
...
select sum(average) from qy_csb_n
ElmerZhang
2020-11-12 11:20:31 +08:00
弄个 qy_csb_table_nums 表,里面就一列,存当前最新 qy_csb_n 的 n 。
每次建新表时更新一下,查询时先查这个表拿到 n 。
lff0305
2020-11-12 11:21:13 +08:00
从 information_schema.tables 查询出来你到底有哪些 qy_csb 表
然后拼出来 SQL,执行。

一条 SQL 应该不行,可以用存储过程或者函数;或者在 Java 里面做
ElmerZhang
2020-11-12 11:23:44 +08:00
你这个新数据一直往新表里写的方式有点类似于按时间分表,这样的表名用日期好一些,比如 qy_csb_202011 或者 qy_csb_20201112 之类的,清历史数据也方便,而且根据时间就知道最新的表是哪个了。
GroupF
2020-11-12 14:04:52 +08:00
@ElmerZhang 是的是的 ,我用这个”information_schema.tables“能模糊搜索到自己等要关联的表 ,然后我还要做一个统计,比如 10 月总量和 ,11 月总量和 ,单个我能用 sql 算出来,但是想要一个 sql 执行出来,这里给卡掉了
GroupF
2020-11-12 14:14:48 +08:00
@lff0305 嗯,谢谢,我看了下存储过程感觉是可以的,但是 我这个是需要实时的。。java 做可能是最好的了
但是函数上来使用的话,我查找并分析了下,我现有的组合不起来这样的组合函数、谢谢,这个选择 java 来做好了,表为什么这样是因为前人设计的每个公司一张表。。。
vone
2020-11-12 14:37:27 +08:00
楼上说的拼接 sql 和使用 Java 循环的方案都只是从业务和 web 开发上来考虑的,只能解决眼前的问题。
你的这个问题如果想彻底解决需要从数据上下手。

从数据库角度来说,你应该建一个汇总表,然后做一个数据同步 JOB (子表增多时修改数据同步代码)。
每天凌晨(频率看业务需求)同步一次各个子表的数据到汇总表,然后后就可以通过汇总表实现你的业务需求。
GroupF
2020-11-12 17:47:46 +08:00
@vone 嗯,你说的对,我是有一张汇总表,但是是昨天的,他有个排放量排名,然后你刷新进去有个比昨天降低多少名次,然后我就有了这个想法,想了半天并没有实现,哈哈。我想的是一步一句提问,显然我问的不是一个好问题,不过谢谢你,虽然这个数据库不是我建立的,但是我以后也要对设计数据库这方面的知识补习补习 [ 偏题了 ]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/724327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX