SQL进阶-去重
一、去重的2种基本方法
1、DISTINCT
##
建表:
CREATE TABLE teacher(
teacher_id VARCHAR(50),
teacher_name VARCHAR(50),
id_no VARCHAR(50)
); CREATE INDEX idx_teacher_id ON teacher(teacher_id); 插入重复数据:
DELETE FROM teacher;
INSERT INTO teacher VALUES('20180204060001','李斌','530102192005080114');
INSERT INTO teacher VALUES('20180204060002','张成','530102192005080115');
INSERT INTO teacher VALUES('20180204060001','李斌','530102192005080114');
INSERT INTO teacher VALUES('20180204060002','张成','530102192005080115');
INSERT INTO teacher VALUES('20180204060001','李斌','530102192005080114');
INSERT INTO teacher VALUES('20180204060002','张成','530102192005080115'); DISTINCT去重查询:
SELECT DISTINCT * FROM teacher; group by去重查询:
SELECT
teacher_id,
MIN(teacher_name),
MIN(id_no)
FROM teacher
GROUP BY teacher_id;
在重复数据都一样的时候,可以用group by,但是当重复数据不完全一样时,可能就会出问题;
二、其他6中去重方法
##
在重复数据都一样的时候,可以用group by,但是当重复数据不完全一样时,可能就会出问题; 插入数据
DELETE FROM teacher;
INSERT INTO teacher VALUES('20180204060001','李斌','530102192005080114');
INSERT INTO teacher VALUES('20180204060002','张成','530102192005080115');
INSERT INTO teacher VALUES('20180204060001','白斌','630102192005080114');
INSERT INTO teacher VALUES('20180204060002','赵成','630102192005080115'); ###
(1)可以用子查询+group by:
select * from teacher a where (a.teacher_id,a.id_no) in
(select b.teacher_id,max(b.id_no) id_no from teacher b group by b.teacher_id); ###
(2)
SELECT * FROM teacher a WHERE NOT EXISTS
(SELECT 1 FROM teacher b WHERE a.teacher_id = b.teacher_id AND a.id_no > b.id_no); ###
(3)
SELECT a.* FROM teacher a WHERE a.id_no <= ALL(
SELECT b.id_No
FROM teacher b
WHERE a.teacher_id = b.teacher_id
); ###
(4)
SELECT a.*
FROM teacher a
INNER JOIN teacher b
ON a.teacher_id = b.teacher_id
AND a.id_no >= b.id_no
GROUP BY a.teacher_id,a.teacher_name,a.id_no
HAVING COUNT(*)=1; ###
(5)
SELECT
teacher_id,
SUBSTRING_INDEX(
GROUP_CONCAT(teacher_name ORDER BY id_no ASC),
',',1),
SUBSTRING_INDEX(
GROUP_CONCAT(id_no ORDER BY id_no ASC),
',',1)
FROM teacher
GROUP BY teacher_id; ###
(6)
SELECT teacher_id,teacher_name,id_no
FROM
(
SELECT
teacher_id,teacher_name,id_no,
ROW_NUMBER() OVER(PARTITIONING BY teacher_id
ORDER BY id_no ASC) AS rn_no
FROM teacher
)
WHERE rn_no = 1; MySQL不支持ROW_NUMBER()的写法!
SQL进阶-去重的更多相关文章
- 《SQL基础教程》+ 《SQL进阶教程》 学习笔记
写在前面:本文主要注重 SQL 的理论.主流覆盖的功能范围及其基本语法/用法.至于详细的 SQL 语法/用法,因为每家 DBMS 都有些许不同,我会在以后专门介绍某款DBMS(例如 PostgreSQ ...
- SQL优化之SQL 进阶技巧(上)
由于工作需要,最近做了很多 BI 取数的工作,需要用到一些比较高级的 SQL 技巧,总结了一下工作中用到的一些比较骚的进阶技巧,特此记录一下,以方便自己查阅,主要目录如下: SQL 的书写规范 SQL ...
- pl/sql进阶--例外处理
在pl/sql的执行过程中发生异常时系统所作的处理称为一个例外情况(exception).通常例外情况的种类有三种: 1.预定义的oracle例外情况oracle预定义的例外情况大约有24个,对于这种 ...
- SQL进阶随笔--case用法(一)
SQL进阶一整个是根据我看了pdf版本的整理以及自己的见解整理.后期也方便我自己查看和复习. CASE 表达式 CASE 表达式是从 SQL-92 标准开始被引入的.可能因为它是相对较新的技术,所以尽 ...
- 【SQL进阶】03.执行计划之旅1 - 初探
听到大牛们说执行计划,总是很惶恐,是对知识的缺乏的惶恐,所以必须得学习执行计划,以减少对这一块知识的惶恐,下面是对执行计划的第一讲-理解执行计划. 本系列[T-SQL]主要是针对T-SQL的总结. S ...
- pl/sql进阶一控制结构
在任何计算机语言(c,java,c#,c++)都有各种控制语句(条件语句,循环结构,顺序控制结构…),在pl/sql中也存在这样的控制结构. 在本部分学校完毕后,希望大家达到: 1)使用各种if语句 ...
- SQL优化之SQL 进阶技巧(下)
上文( SQL优化之SQL 进阶技巧(上) )我们简述了 SQL 的一些进阶技巧,一些朋友觉得不过瘾,我们继续来下篇,再送你 10 个技巧 一. 使用延迟查询优化 limit [offset], [r ...
- (一)《SQL进阶教程》学习记录--CASE
背景:最近用到统计之类的复杂Sql比较多,有种"提笔忘字"的感觉,看书练习,举一反三,巩固加强. (一) <SQL进阶教程>学习记录--CASE (二) <SQL ...
- 二十五、oracle pl/sql进阶--控制结构(分支,循环,控制)
一.pl/sql的进阶--控制结构在任何计算机语言(c,java,pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构...),在pl/sql中也存在这样的控制结构.在本部分学习完成后,希 ...
随机推荐
- Kafka学习笔记之如何永久删除Kafka的Topic
0x00 问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Top ...
- 1.0EnterpriseFrameWork 框架学习
1.先报其主页 :博主的框架是开源的 http://www.cnblogs.com/kakake/p/3938262.html . 2.学习的精髓是:该框架支持 ORM.SQL语句 和 存储过程 ,O ...
- CLR学习之初识CLR
一.什么是CLR? CLR即公共语言运行时(Common Language Runtime,简称CRL),就是微软为.net产品构建的运行环境,与java的JVM类似,通俗的讲就是.net虚拟机.CL ...
- window当mac用,VirtualBox虚拟机安装os系统
mac的环境让开发者很享受,既可以像在linux环境下开发,又可以享受到几乎window所有支持的工具软件,比如ide,note,browser 我的安装过程 1.首先你有了64位的window7操作 ...
- CDH5.14.4中的Hue集成HBase
1.进入CDH中的给HBase添加Thrift Server角色实例, 为了方便, 将Thrift Server添加到Hue同一主机 2.HBase Thrift Server中选择主机cm1: 3. ...
- kubernetes V1.16 Ingress-nginx部署
Ingress 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes中可以通过NodePo ...
- Java 数据类型 & 变量与常量 & 注释
一.数据类型 1.数据类型分类 Java 的数据类型分为两大类: 基本数据类型:整数.浮点数.字符型.布尔型 引用数据类型(对象类型):类.数组,字符串.接口等. 2.基本数据类型 四类八种基本数据类 ...
- JavaScript 流程控制(一)顺序结构与分支结构
语句:语句可以理解为一个行为,循环语句和判断语句就是典型的语句.一个程序有很多个语句组成,一般情况下分号;分割一个一个的语句:如果省略分号,则由解析器确定语句的结尾(不推荐使用) 一.流程控制 流程控 ...
- mysql 外键的基本使用
外键的使用条件: 两个表必须是InnoDB表,MyISAM表暂时不支持外键外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立:外键关系的 ...
- ShareSDK For Unity集成
Mob ShareSDK Android - V2.7.10 iOS - V3.5.0 Mob下载:https://github.com/MobClub/New-Unity-For-ShareSDK ...