最近实现的一个搜索功能要实现排重,想总结如下:
1、我们可以选择将原始数据(包括重复数据)从数据库中读出来然后通过程序进行过滤(不建议)。
2、DISTINCT 语句。DISTINCT 必须放在SQL语句的开头。
表结构如下:
id | name | sex | passtest |
1 | Marray | 1 | 12 |
2 | Marray | 1 | 13 |
3 | Jack | 2 | 13 |
1)作用于单列,SELECT DISTINCT `name` FROM `you_class`,根据用户名进行排重,并且查出的是用户名。
name |
Marray |
Jack |
2) 作用于多列,SELECT DISTINCT `name`,`sex`,`passtest` FROM `you_class` ,根据用户名,性别,分数进行排序,查出的数据包含三列值。
name | sex | passtest |
Marray | 1 | 12 |
Marray | 1 | 13 |
Jack | 2 | 13 |
可见使用DISTINCT 查询出来的数据的列数和去重的列数是相同的,当查询列数和去重列数不相同时我们可以使用GROUP BY。
3、GROUP BY 用于去重,SELECT `id`,`name`,`sex`,`passtest` FROM `you_class` GROUP BY `name`,`sex`,根据用户名,性别去重。查询的数据包含4列。
id | name | sex | passtest |
3 | Jack | 2 | 34 |
2 | Marray | 1 | 13 |