Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL每列的最小值和最大值_Mysql - Fatal编程技术网

MySQL每列的最小值和最大值

MySQL每列的最小值和最大值,mysql,Mysql,我可以运行以下操作来动态标识表中具有许多列的所有十进制字段: SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='tbl_name' AND DATA_TYPE = 'decimal' 如何提取这些字段的最小值和最大值?e、 g.最终输出,如: COLUMN_NAME DATA_TYPE MIN_VAL MAX_VAL a decimal 4

我可以运行以下操作来动态标识表中具有许多列的所有十进制字段:

SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='tbl_name' AND DATA_TYPE = 'decimal'
如何提取这些字段的最小值和最大值?e、 g.最终输出,如:

COLUMN_NAME  DATA_TYPE  MIN_VAL  MAX_VAL
a            decimal    4        22
b            decimal    18       5593
c            decimal    1        299

更新:

这是我用来让它工作的最后一个语法。也许我错过了一个更简单的方法,但这是可行的,所以感谢戈登·林诺夫的回答

set @sql = concat('SELECT ', @cols, ' FROM ', @t);

SELECT @sql := GROUP_CONCAT(REPLACE(REPLACE(@sql, @cols,
                                            CONCAT('"', COLUMN_NAME, '" as TheCol', ', ', '"', DATA_TYPE, '" as TheDType', ', ',
                                                   'MIN(', COLUMN_NAME, ') as TheMin, MAX(', COLUMN_NAME, ') as TheMax'
                                                  )
                                           ),
                                    @t, 'tbl_name') SEPARATOR ' union all '
                            )              
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='tbl_name' AND DATA_TYPE = 'decimal';

prepare s from @sql;
execute s;
deallocate prepare s;

您需要使用动态sql:

set @sql = 'SELECT @cols FROM @t';

SELECT @sql := GROUP_CONCAT(REPLACE(REPLACE(@sql, @cols,
                                            CONCAT(COLUMN_NAME, ', ', DATA_TYPE, ', ',
                                                   'MIN(', COLUMN_NAME, '), MAX(', COLUMN_NAME, ')'
                                                  )
                                           ),
                                    @t, 'tbl_name') SEPARATOR ' union all '
                            )              
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='tbl_name' AND DATA_TYPE = 'decimal';

prepare s from @sql;
execute s;
deallocate prepare s;

您需要使用动态sql:

set @sql = 'SELECT @cols FROM @t';

SELECT @sql := GROUP_CONCAT(REPLACE(REPLACE(@sql, @cols,
                                            CONCAT(COLUMN_NAME, ', ', DATA_TYPE, ', ',
                                                   'MIN(', COLUMN_NAME, '), MAX(', COLUMN_NAME, ')'
                                                  )
                                           ),
                                    @t, 'tbl_name') SEPARATOR ' union all '
                            )              
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='tbl_name' AND DATA_TYPE = 'decimal';

prepare s from @sql;
execute s;
deallocate prepare s;

编写基于tableName和ColumnName的动态SQL语句以获取最小-最大值。编写基于tableName和ColumnName的动态SQL语句以获取最小-最大值。在
分隔符上抛出语法错误。显然,我在引用的2个位置替换了实际的表名-是否需要任何其他更改?在
分隔符上抛出语法错误。很明显,我在引用的两个地方替换了实际的表名-是否需要其他更改?