select b, group_concat(distinct c order by c asc separator ‘:’) result from test group by b;
pivoting 行转为列
primary key(id,attribute) ,同一id下有多条不同attribute数据,把这几条数据合为一条,用attribute1,attribute2…列来表示
unpivoting 列转为行
group by a,b with rollup: 普通group by 有四组,那么这个有7组,a1,null 和a2,null 和null,null,注意:可能有两个a1,null,一个是按a分组,一个是按a,b分组
相当于对a,b分组和对a分组和所有的作为一组合在一起,with rollup后不能用order by
with cube mysql不支持
游标:mysql的存储过程,函数,触发器,事件中使用,先定义游标,再定义handler,游标存储某几列数据
游标特性:可选择不复制结果集,不可更新,单向不可滚动逐行前进
delimiter //
create procedure curTest()
begin
declare done int default 0;
declare b_tmp int ;
declare c_tmp varchar(45) ;
// 先游标,后handler定义当无法从游标取出数据如何退出
declare cur1 cursor for select b,c from test;
declare continue handler for not found set done = 1;
// 打开
open cur1;
read_loop:LOOP
// 循环从游标中取数据
fetch cur1 into b_tmp,c_tmp;
... // 可使用b_tmp,c_tmp 做一些处理
if done
then leave read_loop;
end if;
END LOOP;
//关闭
close cur1;
end;
//
delimiter ;
call curTest();
游标性能:O(N)的倍数,游标只扫描表一次
mysql-cursor:向前,对底层数据变更不敏感,不可更新
jdbc:满足条件才会用到mysql-cursor
ResultSet特性匹配(向前/滚动,敏感/不敏感,只读/可更新的), jdbcUrl里useCusorFetch(jdbc内解析),fetchSize