Sql去重

时间:2023-03-08 22:19:35

distinct:用于返回唯一不同的值。

注意:1、语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的。

2、distinct必须放在开头 如select distinct name from table


group by:“根据(by)一定的规则进行分组(Group)”

它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。
注意:1、按指定的列分组,这必须在查询结果中包含一个聚集函数 如(AVG 、MAX 、MIN、SUM、COUNT)

2、group by 是先排序后分组;

表名table

ID Name   Address        Telephone

1   张三      哈尔滨         123456789

2   李四       上海            784512357

3   王五       北京            759878456

4    张三       香港            785641231

ID唯一,去掉Name重复的记录。保留以ID最大,生成如下表:

ID Name   Address        Telephone

2   李四       上海            784512357

3   王五       北京            759878456

4    张三       香港            785641231

此时需要显示多余的字段故不能使用distinct方法!!

正确写法:先根据单个字段(Name)来判断,只保留有id最大的记录,再进行筛选

select*from table where  ID in

(select max(ID) from table group by Name having count(Name)>0)

错误写法:实际上Group By已经将Name,Address,Telephone同时进行分组

select max(ID),Name,Address,Telephone from table group by Name,Address,Telephone

显示结果:

ID Name   Address        Telephone

1   张三      哈尔滨         123456789

2   李四       上海            784512357

3   王五       北京            759878456

4    张三       香港            785641231