› 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 · Nov 12, 2020 · 3944 views
    This topic created in 2146 days ago, the information mentioned may be changed or developed.

    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 replies  •  2020-11-12 17:47:46 +08:00
    GroupF
        1
    GroupF  
    OP
       Nov 12, 2020
    排版好像有点问题
    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  
       Nov 12, 2020
    弄个 qy_csb_table_nums 表,里面就一列,存当前最新 qy_csb_n 的 n 。
    每次建新表时更新一下,查询时先查这个表拿到 n 。
    lff0305
        3
    lff0305  
       Nov 12, 2020   ❤️ 1
    从 information_schema.tables 查询出来你到底有哪些 qy_csb 表
    然后拼出来 SQL,执行。

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

    从数据库角度来说,你应该建一个汇总表,然后做一个数据同步 JOB (子表增多时修改数据同步代码)。
    每天凌晨(频率看业务需求)同步一次各个子表的数据到汇总表,然后后就可以通过汇总表实现你的业务需求。
    GroupF
        8
    GroupF  
    OP
       Nov 12, 2020
    @vone 嗯,你说的对,我是有一张汇总表,但是是昨天的,他有个排放量排名,然后你刷新进去有个比昨天降低多少名次,然后我就有了这个想法,想了半天并没有实现,哈哈。我想的是一步一句提问,显然我问的不是一个好问题,不过谢谢你,虽然这个数据库不是我建立的,但是我以后也要对设计数据库这方面的知识补习补习 [ 偏题了 ]
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4762 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:37 · PVG 17:37 · LAX 02:37 · JFK 05:37
    ♥ Do have faith in what you're doing.