从多个表中获取所有列的最大值
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+)列的空计数、最小值和最大值的最佳方法