sql:对某一字段去重,并展示其他字段信息

sql:对某一字段去重,并展示其他字段信息

为了举例专门建了一张表(usertest) 数据如下;

id name age
1 LBJ 35
2 DWS 28
3 LBJ 26
4 KLS 29
5 KZM 28
6 KZM 30
7 LBJ 33

现在以name字段去重,并同时展示其他字段的信息(name相同的记录随便展示那条都可以)。

这里容易犯错的语句如下:
错误示例:

select * from usertest where name in (select DISTINCT name from usertest )

这里利用distinct ,查询的结果是所有的。并不是去重的。

可以达到目的的sql 如下:

select * from usertest where id in 
(select max(id) as id from usertest group by name);

详细分析:
这里使用的子查询、聚合函数、以及分组函数。

  1. 比如我以name来去重, 那么就以name来分组,这时候得到的结果有如下:
  • 第一组:
id name age
1 LBJ 35
3 LBJ 26
7 LBJ 33
  • 第二组:
id name age
2 DWS 28
  • 第三组:
id name age
4 KLS 29
  • 第四组:
id name age
5 KZM 28
6 KZM 30
  1. 使用聚合函数max(id) ,分组中id最大的 (min也可以,目的就是取分组中的其中一条) ,然后得到结果如下:
  • 第一组:
    id = 7

  • 第二组:
    id= 2

  • 第三组:
    id= 4

  • 第四组:
    id = 6

  1. 通过上述的子查询,得到了id 的集合 分别为(7,2,4,6)
    最后通过外部查询 select * from usertest where id in (7,2,4,6) , 即查出了去重字段以及其他字段的信息,满足需求。

在这里插入图片描述

当然解法这只是其中一种写法,有兴趣尝试其他实现。

发布了132 篇原创文章 · 获赞 108 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/fanbaodan/article/details/103576698