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 · 2828 次点击
    这是一个创建于 1472 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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   ·   实用小工具   ·   2568 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:38 · PVG 10:38 · LAX 18:38 · JFK 21:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.