-- 一个奇怪的My SQL游标循环问题 --
-- 我的一个函数
-- 其作用是生成一个可执行的SQL语句,
-- 目的是生成“查询一张表的int类型字段的所有max、min、avg值”的SQL语句的函数:
DELIMITER $$
CREATE FUNCTION get_tb_numberInfo(v_tb_name varchar(50))
RETURNS VARCHAR(2000) CHARSET utf8
BEGIN
DECLARE v_sql varchar(20000);
DECLARE v_column_name varchar(200);
DECLARE v_column_name_min varchar(200);
DECLARE v_column_name_max varchar(200);
DECLARE v_column_name_avg varchar(200);
DECLARE no_more_departments boolean;
DECLARE get_tbInfo CURSOR FOR
SELECT column_name FROM information_schema.columns
WHERE UPPER(TABLE_NAME)=upper(v_tb_name)
AND TABLE_SCHEMA=(select database())
AND DATA_TYPE IN('bigint','int','decimal');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
SET no_more_departments=0;
SET v_sql := 'SELECT ';
OPEN get_tbInfo;
REPEAT
-- Get get_tbInfo
FETCH get_tbInfo INTO v_column_name;
SET v_column_name_min = concat('min(',v_column_name,') as ',v_column_name,'_min,');
SET v_column_name_max = concat('max(',v_column_name,') as ',v_column_name,'_max,');
SET v_column_name_avg = concat('avg(',v_column_name,') as ',v_column_name,'_avg,');
SET v_sql = concat(v_sql,v_column_name_min,v_column_name_max,v_column_name_avg,'\n');
UNTIL no_more_departments
END REPEAT;
CLOSE get_tbInfo;
SET v_sql = substring(v_sql,1,length(v_sql)-1);
SET v_sql = concat(v_sql,' from ',v_tb_name,';');
RETURN v_sql;
END;
$$
delimiter ;
-- 但是:我每次执行后,最后一个字段生成了两次:min、max、avg字段,例如:
mysql> select get_tb_numberInfo('f_union_refer_date_index');
SELECT
min(date_id) as date_id_min,max(date_id) as date_id_max,avg(date_id) as date_id_avg,
min(refer_id) as refer_id_min,max(refer_id) as refer_id_max,avg(refer_id) as refer_id_avg,
min(ip_num) as ip_num_min,max(ip_num) as ip_num_max,avg(ip_num) as ip_num_avg,
min(direct_pv_num) as direct_pv_num_min,max(direct_pv_num) as direct_pv_num_max,avg(direct_pv_num) as direct_pv_num_avg,
min(indirect_pv_num) as indirect_pv_num_min,max(indirect_pv_num) as indirect_pv_num_max,avg(indirect_pv_num) as indirect_pv_num_avg,
min(direct_cv_num) as direct_cv_num_min,max(direct_cv_num) as direct_cv_num_max,avg(direct_cv_num) as direct_cv_num_avg,
min(indirect_cv_num) as indirect_cv_num_min,max(indirect_cv_num) as indirect_cv_num_max,avg(indirect_cv_num) as indirect_cv_num_avg,
min(direct_uv_num) as direct_uv_num_min,max(direct_uv_num) as direct_uv_num_max,avg(direct_uv_num) as direct_uv_num_avg,
min(new_uv_num) as new_uv_num_min,max(new_uv_num) as new_uv_num_max,avg(new_uv_num) as new_uv_num_avg,
min(new_uv_num) as new_uv_num_min,max(new_uv_num) as new_uv_num_max,avg(new_uv_num) as new_uv_num_avg from f_union_refer_date_index;
-- 请问是怎么回事儿呢?有什么办法解决不?
...全文
相关推荐
SQL Server上的一个奇怪的Deadlock及其分析方法
SQL Server上的一个奇怪的Deadlock及其分析方法
解决在SQL脚本中的注释引起的奇怪问题
通过osql.exe这个工具来对相关的数据库脚本进行更新,昨天突然发现安装包报错了,说脚本错误,研究发现有个不错的解决方法,需要的朋友不要错过
奇怪的SQL_可以进一步跟进.
一个奇怪的sql.运行环境:vs2013的工具"connect to database"下的query window.效果:空白字符导致查询条件无效. 需要使用抓包工具进一步分析.
一个奇怪的SQL异常
用了很久的一个框架,在开发的时候突然抛了一个sql的异常: Cannot create **bean. 开始还以为是sql语句写的有问题,但是sql都是代码生成器自动生成的,一般情况下不会出问题. 再仔细分析了下,是由于采用的dbutil的jar包来存储查询结果的.但是dbutil是使用默认的构造函数来初始化实体bean的(是没有参数的构造函数). 而我刚好在这个class里面新增了一个带参数的构造函数,dbutil找不到构造函数了. public Teachergroup(String teacherId, String groupId) { super(); th
MySQL 5.7.14 net start mysql 服务无法启动-“NET HELPMSG 3534” 的奇怪问题
主要介绍了MySQL 5.7.14 net start mysql 服务无法启动-“NET HELPMSG 3534” 的奇怪问题,需要的朋友可以参考下


