请问一个问题,我有很多张同样类型不同名字的数据库,我可以查出来相关表名,但是表名可能会增加 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
GroupF
V2EX    MySQL

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

  •  
  •   GroupF 2020-11-12 10:56:46 +08:00 3207 次点击
    这是一个创建于 1798 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 循环来做也是可行的,但是我并不想用这种方式,可能自己有点钻牛角尖了。。

    希望给点思路,谢谢

    8 条回复    2020-11-12 17:47:46 +08:00
    GroupF
        1
    GroupF  
    OP
       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
        2
    ElmerZhang  
       2020-11-12 11:20:31 +08:00
    弄个 qy_csb_table_nums 表,里面就一列,存当前最新 qy_csb_n 的 n 。
    每次建新表时更新一下,查询时先查这个表拿到 n 。
    lff0305
        3
    lff0305  
       2020-11-12 11:21:13 +08:00   1
    从 information_schema.tables 查询出来你到底有哪些 qy_csb 表
    然后拼出来 SQL,执行。

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

    从数据库角度来说,你应该建一个汇总表,然后做一个数据同步 JOB (子表增多时修改数据同步代码)。
    每天凌晨(频率看业务需求)同步一次各个子表的数据到汇总表,然后后就可以通过汇总表实现你的业务需求。
    GroupF
        8
    GroupF  
    OP
       2020-11-12 17:47:46 +08:00
    @vone 嗯,你说的对,我是有一张汇总表,但是是昨天的,他有个排放量排名,然后你刷新进去有个比昨天降低多少名次,然后我就有了这个想法,想了半天并没有实现,哈哈。我想的是一步一句提问,显然我问的不是一个好问题,不过谢谢你,虽然这个数据库不是我建立的,但是我以后也要对设计数据库这方面的知识补习补习 [ 偏题了 ]
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3341 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 10:43 PVG 18:43 LAX 03:43 JFK 06:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86