-
利用序列表处理列转行的数据 select user_name,replace(substring(substring_index(mobile,',',a_id),char_length( substring_index(mobile,',',a.id-1),',',")as mobile from tb_sequernce a cross join select user_name, concat(mobile,',') as mobile,length(mobile)-length(replace(mobile,',',"))+1 size from user1 b ) b on a.id<=b.size; 序列表:存在序列号的表。tb_sequence是序列表。 直接替换user1查看全部
-
列转行: 单列转多行:属性拆分,ETL数据处理查看全部
-
使用CASE语句: SELECT SUM(CASE USER_NAME='A' THEN KILLS END) AS 'A', SUM(CASE USERNAME='B' THEN KILL END) AS 'B', SUM(CASE USERNAME='C' THEN KILL END) AS 'C' FROM A INNER JOIN B ON A.NAME=B.USERNAME; 通过CASE给满足WHEN语句的数据返回SUM聚合函数要统计的数据,再将SUM进行重命名。推荐。 一般形式 SELECT NAME AS '姓名', SUM(CASE SUBJECT WHEN '数学' THEN MARK ELSE NULL END) AS '数学', SUM(CASE SUBJECT WHEN '英语' THEN MARK ELSE NULL END) AS '英语', SUM(CASE SUBJECT WHEN '语文' THEN MARK ELSE NULL END) AS '语文' FROM SUBJECT GROUP BY NAME; CASE语句中放原来表中要进行转换的字段(如学科),对其进行分类(如数学、英语、语文)。 注意:要用聚合函数,最后要GROUP BY。查看全部
-
行转列: 利用自身连接来实现: SELECT * FROM ( SELECT SUM(KILLS) AS 'A' FROM A INNER JOIN B ON A.NAME=B.USER_NAME WHERE A.NAME='A') AS A CROSS JOIN( SELECT SUM(KILLS) AS 'B' FROM A INNER JOIN B ON A.NAME=B.USER_NAME WHERE A.NAME='B') AS B CROSS JOIN( SELECT SUM(KILLS) AS 'C' FROM A INNER JOIN B ON A.NAME=B.USER_NAME WHERE A.NAME='C')AS C; 比如成绩 1、分别查询出不同同学的成绩,并将字段名改为同学的名字 2、通过交叉连接,将不同的语句连接起来 缺点:是将原来查询的结果每一行单独查询出来,再进行拼接。因此每增加一个同学就增加一个SELECT语句。并且是通过交叉连接,要保证每个查询的结果只能是一个,不然没办法通过交叉连接实现转换。查看全部
-
create table arms( id mediumint primary key auto_increment, username varchar(64), arms varchar(64), clothing varchar(64), shoe varchar(64) ); insert into arms(username,arms,clothing,shoe) values('唐僧','九环锡杖','袈裟','僧鞋'),('孙悟空','金箍棒','黄金甲','步云鞋'); select username,'arms',arms from arms union all select username,'clothing',clothing from arms union all select username,'shoe',shoe from arms;
查看全部 -
删除重复数据,对于相同数据保留ID最大的。查看全部
-
1113412查看全部
-
cross join查看全部
-
存储过程——订单号查看全部
-
如何查询重复数据? 利用group by 和having语句进行判断 select user_name ,count(*) from test group by user_name having count(*)>1查看全部
-
删除重复数据,同时保留id最大的那条记录 delete a from user1_test a join( select user1_name count(*),max(id) as id from user1_test group by user_name having count(*) >1 )b on a.user_name = b.user_name where a.id<b.id查看全部
-
利用group by和having从句处理查询数据是否重复 select col1_name,count(*) from table1 group by col1_name having count(*) > 1查看全部
-
用sql生成特殊的序列号查看全部
-
生成序列号的方法查看全部
-
使用union进行行列转换查看全部
举报
0/150
提交
取消