一、distinct去重一个字段
SELECT DISTINCT column1 FROM table_name;
以上语句将返回指定表中唯一的column1值列表。
例如我们有一个students表,其中包含了每个学生的姓名和年龄,如下所示:
| 姓名 | 年龄 | |--------|--------| | 小明 | 12 | | 小红 | 11 | | 小刚 | 12 | | 小军 | 13 | | 小丽 | 14 |
如果我们只想得到唯一的年龄值,可以使用如下语句:
SELECT DISTINCT 年龄 FROM students;
结果将返回:
| 年龄 | |-------| | 12 | | 11 | | 13 | | 14 |
二、distinct去重规则
当我们在使用DISTINCT时,需要注意一些规则:
- DISTINCT用于去除重复行,而不是重复列。也就是说,如果一行中的任何一列与另一行中的任何一列相同,那么这两行都将被去除。
- DISTINCT是一种关键字,但是它不会把所有列都变成唯一的,它只会使指定的列唯一。如果我们指定多个列,将检查这些列的值是否与另一行的值完全相同。
- DISTINCT与GROUP BY不同,GROUP BY可以指定多个列。如果我们指定了多个列,则将按照这些列的值进行分组。
三、distinct后面多个字段
可以使用逗号分隔多列,指定多个列来指定distinct操作。例如:
SELECT DISTINCT column1, column2, column3 FROM table_name;
以上语句将返回指定表中唯一的column1、column2和column3值组合列表。
四、distinct两个字段
例如我们有一个orders表,其中包含了订单ID、产品ID、价格和客户ID等信息,如下所示:
| 订单ID | 产品ID | 价格 | 客户ID | |----------|--------|--------|--------| | 1001 | 1 | 39.99| 1| | 1002 | 2 | 29.99| 2| | 1003 | 3 | 99.99| 3| | 1004 | 1 | 39.99| 2| | 1005 | 2 | 29.99| 4| | 1006 | 3 | 99.99| 5|
如果我们指定订单ID和产品ID列唯一,那么我们可以使用如下语句:
SELECT DISTINCT 订单ID, 产品ID FROM orders;
结果将返回order表中唯一的订单ID和产品ID:
| 订单ID | 产品ID | |--------|--------| | 1001 | 1 | | 1002 | 2 | | 1003 | 3 |
五、distinct多个字段
如果我们想让客户ID、产品ID和价格的组合唯一,则可以使用如下语句:
SELECT DISTINCT 客户ID, 产品ID, 价格 FROM orders;
结果将返回order表中唯一的客户ID、产品ID和价格组合:
| 客户ID | 产品ID | 价格 | |-------|--------|-------| | 1 | 1 | 39.99 | | 2 | 2 | 29.99 | | 3 | 3 | 99.99 | | 2 | 1 | 39.99 | | 4 | 2 | 29.99 | | 5 | 3 | 99.99 |