SQL入门:去重技巧-DISTINCT高效实战

在 SQL 中,去重用于从查询结果中移除重复的记录,确保返回的数据唯一,核心通过DISTINCT关键字实现,适用于需要获取不重复值的场景(如统计 unique 用户数、提取所有分类名称等)。

一、基本去重:DISTINCT 关键字

1. 单字段去重

对单个字段去重,返回该字段所有不重复的值,语法:

SELECT DISTINCT 字段名 FROM 表名;

示例:从orders表中提取所有不重复的用户 ID(查看有哪些用户下过单):

SELECT DISTINCT user_id FROM orders;

2. 多字段去重

对多个字段组合去重,只有当所有字段的值完全相同时才视为重复记录,语法:

SELECT DISTINCT 字段1, 字段2, ... FROM 表名;

示例:从users表中提取不重复的 “城市 + 性别” 组合(统计不同城市的性别分布类别):

SELECT DISTINCT city, gender FROM users;

说明:此例中,只有当 “城市” 和 “性别” 都相同时才会被去重,若仅城市相同而性别不同,会被视为不同的记录保留。

二、去重与聚合:结合 COUNT() 统计

DISTINCT 常与聚合函数 COUNT() 结合,统计不重复记录的数量,语法:

SELECT COUNT(DISTINCT 字段名) AS 去重后数量 FROM 表名;

示例 1:统计orders表中不重复的用户数(即有多少个独立用户下过单):

SELECT COUNT(DISTINCT user_id) AS unique_user_count FROM orders;

示例 2:统计不重复的 “城市 + 性别” 组合数量:

SELECT COUNT(DISTINCT city, gender) AS unique_group_count FROM users;

三、注意事项

  1. DISTINCT 作用范围DISTINCT 对其后所有字段生效,而非仅对紧跟的第一个字段生效。例如 SELECT DISTINCT a, b 是对ab的组合去重,而非仅对a去重。

  2. 与 GROUP BY 的关系:多字段去重也可通过 GROUP BY 实现(GROUP BY 会自动对分组字段去重),效果与 DISTINCT 相同,但 DISTINCT 更简洁。例如:

    -- 与 SELECT DISTINCT city, gender FROM users 效果一致
    SELECT city, gender FROM users GROUP BY city, gender;
  3. NULL 值的处理DISTINCT 会将所有 NULL 视为相同值,去重后只保留一条 NULL 记录。例如字段email中有多个 NULL,SELECT DISTINCT email 只会返回一个 NULL。

  4. 性能影响:去重操作需要对数据进行排序或哈希处理,对大表查询可能影响性能,建议仅在必要时使用,并确保相关字段有合适的索引。

四、适用场景

  • 提取唯一值列表(如所有商品分类、所有省份名称);
  • 统计独立实体数量(如独立访客数、独立下单用户数);
  • 清洗重复数据(结合 WHERE 条件筛选后去重)。

DISTINCT 是标准 SQL 中最直接的去重方式,通过单字段或多字段组合,能高效实现数据去重需求,是数据查询和统计分析中的常用操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值