- 
            
            mysql cross join 实现行转列 查看全部
- 
            
            DELETE a FROM user1_test a JOIN ( SELECT user_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; 查看全部
- 
            
            select user_name ,count(*) from user1_test group_by user_name having count(*)>1 查看全部
- 
            
            alter table user1 add column mobile varchar(100) 查看全部
- 
            
            select sum(case when user_name='孙悟空' then kills end) as ‘孙悟空’,sum(case when user_name=‘猪八戒’ then kills end) as ‘猪八戒’,sum(case when user_name=‘沙僧’) as '沙僧' from user1 a join user_kills b on a。id=b.user_id 查看全部
- 
            
            select a.'user_name',sum(kills) from user1 a join user_kills b on a.id=b.userId groub by a.user_name 查看全部
- 
            
            select a.'user_name',kills from user1 a join user_kills b on a.id=b.userId 查看全部
- 
            
            show tables 展示表 查看全部
- 
            
            行转列的场景 查看全部
- 
            
            需要使用唯一序列号的场景: 1. 作为数据库主键。 2. 业务序列号。 生成序列号的方法: - MySQL:AUTO_INCREMENT - SQLServer:IDENTITY/SEQUENCE - Oracle:SEQUENCE - PgSQL:SEQUENCE 如何选择生成序列号的方式: 【原则】:优先选择系统提供的序列号生成方式。 【优点】: 1. 控制并发; 2. 不重复,保证序列号的唯一性。 【缺点】:序列号不连续(数据空洞),例如 1、2、4。 【原因】:对已有的数据的删除,以及事务回滚等方式不会影响自增长的序号,例如已有数据 1、2、3,删除 3 号数据。之后再插入一条数据,此时数据表的数据为 1、2、4。 查看全部
- 
            
            需要使用唯一序列号的场景: 1. 作为数据库主键。 2. 业务序列号:如发票号、车票号、订单号等。 生成序列号的方法: - MySQL:AUTO_INCREMENT - SQLServer:IDENTITY/SEQUENCE - Oracle:SEQUENCE - PgSQL:SEQUENCE 如何选择生成序列号的方式: 【原则】:优先选择系统提供的序列号生成方式。 【优点】: 1. 控制并发; 2. 不重复,保证序列号的唯一性。 【缺点】: 1. 序列号不连续(数据空洞),例如 1、2、4。 【原因】:对已有的数据的删除,以及事务回滚等方式不会影响自增长的序号,例如已有数据 1、2、3,删除 3 号数据。之后再插入一条数据,此时数据表的数据为 1、2、4。 查看全部
- 
            
            需要使用唯一序列号的场景: 1. 作为数据库主键。 2. 业务序列号:如发票号、车票号、订单号等。 生成序列号的方法: - MySQL:AUTO_INCREMENT - SQLServer:IDENTITY/SEQUENCE - Oracle:SEQUENCE - PgSQL:SEQUENCE 如何选择生成序列号的方式: 【原则】:优先选择系统提供的序列号生成方式。 【优点】: 1. 控制并发; 2. 不重复,保证序列号的唯一性。 【缺点】: 1. 序列号不连续(数据空洞),例如 1、2、4。 【原因】:对已有的数据的删除,以及事务回滚等方式不会影响自增长的序号,例如已有数据 1、2、3,删除 3 号数据。之后再插入一条数据,此时数据表的数据为 1、2、4。 查看全部
- 
            
            再看一遍查看全部
- 
            
            1.分别查出数列的结果然后用cross jion 连接 2.用case when查看全部
- 
            
            CREATE TABLE order_seq( timestr INT UNSIGNED, order_sn INT UNSIGNED, ); DELIMITER // CREATE PROCEDURE seq_no() BEGIN DECLARE v_cnt INT; DECLARE v_timestr INT; DECLARE rowcount BIGINT; SET v_timestr = DATE_FORMAT(NOW(),'%Y%m%d'); SELECT ROUND(RAND()*100,0)+1 INTO v_cnt; START TRANSACTION; UPDATE order_seq SET order_sn = order_sn + v_cnt WHERE timestr = v_timestr; IF ROW_COUNT() = 0 THEN INSERT INTO order_seq(timestr,order_sn) VALUES(v_timestr,v_cnt); END IF; SELECT CONCAT(v_timestr,LPAD(order_sn,7,0))AS order_sn FROM order_seq WHERE timestr = v_timestr; COMMIT; END// DELIMITER ; CALL seq_no();· 查看全部
- 
            
            @MySQL---删除复杂的重复数据 #准备好要用的表 create table user1_practice( id int not null auto_increment primary key, user_name varchar(3), over varchar(5), mobile varchar(100)); insert into user1_practice(user_name,over,mobile) values ('唐僧','旃檀功德佛','12112345678,14112345678,12112345678'); insert into user1_practice(user_name,over,mobile) values ('猪八戒','净坛使者','12144643321,14144643321'); insert into user1_practice(user_name,over,mobile) values ('孙悟空','斗战胜佛','12166666666,14166666666,18166666666,18166666666'); insert into user1_practice(user_name,over,mobile) values ('沙僧','金身罗汉','12198343214,14198343214'); #建一个序列表 create tb_sequence(id int not null auto_increment primary key); insert into tb_sequence values(),(),(),(),(),(),(),(),(); #列转行后的表user1_trans1 create table user1_trans1 as select a.id,user_name,over,replace(substring( substring_index(mobile,',',a.id), char_length(substring_index(mobile,',',a.id-1))+1),',','') as mobile from tb_sequence a cross join(select user_name,over,concat(mobile,',') as mobile, length(mobile)-length(replace(mobile,',',''))+1 as size from user1_practice b) b on a.id <= b.size; #删除user1_trans1表中的重复记录 delete a from user1_trans1 a join (select user_name,over,mobile,count(*),max(id) as id from user1_trans1 group by user_name,over,mobile having count(*) > 1 ) b on a.user_name = b.user_name and a.over = b.over and a.mobile = b.mobile where a.id < b.id; #用group_concat函数将mobile转化成以逗号分隔的字符串 create table user1_trans2 as select user_name,over,group_concat(mobile) as mobile from user1_trans1 group by user_name,over; #对原表user1_practice进行关联更新 update user1_practice a inner join user1_trans2 b on a.user_name = b.user_name set a.mobile = b.mobile;查看全部
- 
            
            @MySQL---利用主键处理重复数据 1.查询数据是否重复 SELECT user_name,COUNT(*) FROM user1_test GROUP BY user_name HAVING COUNT(*)>1; 2.删除重复数据,对于相同数据保留ID最大的 DELETE a FROM user1_test a JOIN( SELECT user_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; 查看全部
举报
 
             
         
                 
                 
                 
                 
                 
                 
                