为了账号安全,请及时绑定邮箱和手机立即绑定
  • 使用case 语句来实现行列转换 SELECT SUM(CASE WHEN u.`user_name` = '八戒' THEN k.`kills` END) AS '八戒', SUM(CASE WHEN u.`user_name` = '悟空' THEN k.`kills` END) AS '悟空' , SUM(CASE WHEN u.`user_name` = '沙僧' THEN k.`kills` END) AS '沙僧' FROM xyj_user_kills k JOIN xyj_user1 u ON k.`user_id` = u.`id`;
    查看全部
  • 查看全部
  • CREATE TABLE `user1` (

      `id` int(11) NOT NULL,

      `user_name` varchar(3) COLLATE utf8_bin NOT NULL,

      `over` varchar(5) COLLATE utf8_bin NOT NULL,

      PRIMARY KEY (`id`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin

    CREATE TABLE `user2` (

      `id` int(11) NOT NULL AUTO_INCREMENT,

      `user_name` varchar(3) COLLATE utf8_bin NOT NULL,

      `over` varchar(5) COLLATE utf8_bin NOT NULL,

      PRIMARY KEY (`id`)

    ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

    CREATE TABLE `user_kills` (

      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

      `user_id` int(11) NOT NULL,

      `timestr` datetime NOT NULL,

      `kills` int(10) unsigned NOT NULL,

      PRIMARY KEY (`id`)

    ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_bin


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

    2021-04-08

  • 删除重复数据,保留ID号大的

    查看全部
  • 如何查询数据是否重复

    查看全部
  • 产生数据重复的原因

    查看全部
  • @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;
    查看全部
  • 行转列: SELECT username,REPLACE(substring(SUBSTRING_INDEX(mobile,',',a.id), CHAR_LENGTH(SUBSTRING_INDEX(mobile,',',a.id-1))+1),',','') AS mobile FROM tb_sequence AS a CROSS JOIN (SELECT username, CONCAT(mobile,',') AS mobile, (LENGTH(mobile)-LENGTH(REPLACE(mobile,',',''))+1) AS size FROM user1) AS b ON a.id <= b.size;
    查看全部
  • 2.使用case语句进行行列转换<br> select sum(case when user_name='孙悟空' then kills end) as '孙悟空',<br> sum(case when user_name='猪八戒' then kills end) as '猪八戒',<br> sum(case when user_name='沙僧' then kills end) as '沙僧'<br> from user1 a join user_kills b on a.id=b.user_id; ----------------------------------------------- 使用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语句。并且是通过交叉连接,要保证每个查询的结果只能是一个,不然没办法通过交叉连接实现转换。
    查看全部
  • 1.判断数据是否重复: SELECT user_name , over, count(*) FROM user1_test GROUP BY user_name, over HAVING count(*)>1 2.删除重复数据,对于相同数据保留ID最大的 DELETE * 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 3.将表中查询的数据再次插入到表中 INSERT INTO xmss_wh(XM_ID,WH_ID,YJ,SH,SHR,FJ_NAME,FJ_ID) SELECT XM_ID,WH_ID,YJ,SH,SHR,FJ_NAME,FJ_ID FROM xmss_wh WHERE ID=28; sql中的group by 用法解析: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。 它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 --注意:group by 是先排序后分组; --举例子说明:如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术 select DepartmentID as '部门名称', COUNT(*) as '个数' from BasicDepartment group by DepartmentID 这个就是使用了group by +字段进行了分组,其中我们就可以理解为我们按照了部门的名称ID DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少; 如果不用count(*)等类似函数 select DepartmentID,DepartmentName from BasicDepartment group by DepartmentID 将会报错
    查看全部
  • 更复杂的重复删除:属性中有相同的字段 1、想将属性通过单列转多行得到新的表 2、再删除重复数据 3、再利用GROUP BY CONCAT回复成原表
    查看全部
  • 唯一序列号: 场景:数据库主键、业务序列号 优先选择系统提供的序列号生成方式。当可能会有空洞产生。 特殊情况下可使用SQL方式生成序列号,如要求有一定规律,不一定由数字构成 系统生成方法: rollback数据回滚
    查看全部
  • 较为复杂的重复数据的处理: sql: select username,GROUP_CONCAT(phone) mobile from ( select DISTINCT a.username, REPLACE(SUBSTRING(SUBSTRING_INDEX(a.mobile,',',s.id),LENGTH(SUBSTRING_INDEX(a.mobile,',',s.id-1))+1),',','') phone from t_sequence s join (select username, CONCAT(mobile,',') mobile, (LENGTH(mobile)-LENGTH(REPLACE(mobile,',',''))+1) count from t_user where mobile is not null) a on s.id <= a.count )as b GROUP BY username
    查看全部
  • SQL开发技巧(二) 如何进行行列转换 需要进行行转列的场景:汇总显示
    查看全部

举报

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

微信扫码,参与3人拼团

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

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