从多个表中获取所有列的最大值

Posted

技术标签:

【中文标题】从多个表中获取所有列的最大值【英文标题】:Get maximum value across all columns from multiple tables 【发布时间】:2020-11-03 14:29:11 【问题描述】:

如何获取我的数据库(mysql)中所有表的最大主键?

我有以下查询来检索 all columns from all tables主键 并且是来自 my_db 数据库的 INT 数据类型

SELECT 
    table_name, column_name
FROM
    INFORMATION_SCHEMA.COLUMNS
WHERE
    table_schema = 'my_db'
        AND column_key = 'PRI'
        AND data_type LIKE '%int%'
ORDER BY TABLE_NAME , COLUMN_NAME

但是现在,我被困在从所有表中的所有这些列中获取最大值。有没有办法做到这一点?我的预期输出将是单个整数,这是所有这些列中最大的。

谢谢!

【问题讨论】:

也许你可以使用UNION ALL查询所有三个表并从那里得到MAX.. 谢谢,我已经听从了你的建议``` lang-sql select id from table_1 union select id from table_2 union select id from table_3 order by id desc limit 1``` 它工作正常,但是什么如果我不知道这些表和列的名称(table_N 和id),我需要运行查询来检索它们(eq.查询上面的问题)。有没有办法将它们链接在一起?谢谢 对不起,在注释中格式化代码相当困难,这是我运行的sql select id from table_1 union select id from table_2 union select id from table_3 order by id desc limit 1 【参考方案1】:

假设所有列都具有兼容的类型(您正在检查),那么您可以使用元数据构造查询:

select group_concat(replace(replace('select max([column_name]) from [table_name]', '[column_name]', column_name), '[table_name]', table_name)
                    separator '\nunion all\n')
from INFORMATION_SCHEMA.COLUMNS
where table_schema = 'my_db' and
     column_key = 'PRI' and
     data_type LIKE '%int%'
order by TABLE_NAME, COLUMN_NAME;

我只是复制查询并运行它。但是您可以通过为结果字符串分配一个变量并使用 prepare/exec 来进一步自动化该过程。

【讨论】:

哇,太棒了。这是我的完整实现集@a = (<above query>)prepare stmt from @a;execute stmt;deallocate prepare stmt;。如果我错过了什么,请告诉我。谢谢 @HendryAng 。 . .没关系。

以上是关于从多个表中获取所有列的最大值的主要内容,如果未能解决你的问题,请参考以下文章

从 pyspark 数据框中获取多个(100+)列的空计数、最小值和最大值的最佳方法

迭代获取数据框列的最大值,加一并重复 r 中的所有行

基于另一列的最大值的列上的 SQL 内连接 [重复]

从具有两个变量列的表中选择最大值(microsoft SQL)

表中所有列的最大数据长度-Oracle [重复]

如何使用 WordPress API 在 PHP 中获取 MySQL 表的列的最大值