为了账号安全,请及时绑定邮箱和手机立即绑定
  • 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 展示表

    查看全部
    0 采集 收起 来源:MySQL-需求分析

    2018-08-14

  • 行转列的场景

    查看全部
    0 采集 收起 来源:MySQL-需求分析

    2018-08-14

  • 需要使用唯一序列号的场景:

    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;
    查看全部

举报

0/150
提交
取消
课程须知
本门课程主要针对的是MySQL数据库,熟悉数据库的CRUD操作是掌握本门课程精华的必要条件。
老师告诉你能学到什么?
1、如何进行行列转换 2、如何生成唯一序列号 3、如何删除重复数据

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!