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