SQL 去重查询:DISTINCT 的正确用法

98 阅读2分钟

在写 SQL 查询时,经常会遇到一个问题:结果里有重复的数据。 这时候,很多人会问:怎么才能只保留唯一的结果?

答案就是 —— DISTINCT。

这篇文章带你全面理解 DISTINCT 的正确用法。

1. 为什么需要去重?

假设我们有一张用户订单表 orders:

id | user_id | product
---|---------|---------
1  | 101     | iPhone
2  | 102     | iPad
3  | 101     | MacBook
4  | 103     | iPhone
5  | 101     | iPhone

如果我们想看看 有哪些用户买过东西,直接查询:

SELECT user_id FROM orders;

结果是:

user_id
-------
101
102
101
103
101

这里 101 出现了三次,因为他买过多件商品。 👉 但我们只想要用户 ID 的 唯一集合。

2. 使用 DISTINCT 去重

这时可以用 DISTINCT:

SELECT DISTINCT user_id FROM orders;

结果:

user_id
-------
101
102
103

很干净,重复的 101 被去掉了。

3. 多列去重

DISTINCT 不仅能对单列去重,还能对多列组合去重。

比如,我们想知道 用户和商品的唯一组合:

SELECT DISTINCT user_id, product FROM orders;

结果:

user_id | product
--------|---------
101     | iPhone
101     | MacBook
102     | iPad
103     | iPhone

👉 注意:101 + iPhone 只会出现一次,即使他买过多次。

4. DISTINCT 和 COUNT 一起用

很多时候,我们不是要查数据本身,而是要 统计唯一值的数量。

SELECT COUNT(DISTINCT user_id) AS unique_users FROM orders;

结果:

unique_users
------------
3

说明这张表里,一共有 3 个不同的用户。

5. 使用 DISTINCT 的注意事项

  1. 效率问题

DISTINCT 会对结果集做排序或哈希去重,如果表很大,查询可能比较慢。

如果只是想去重统计,建议结合 索引 优化。

  1. 不要滥用

有些重复其实是数据问题,比如订单表里有脏数据。

如果经常要 DISTINCT,要考虑是不是数据库设计出了问题。

6. 总结

DISTINCT 用来去掉查询结果中的重复行;

可以作用于 单列 或 多列组合;

常和 COUNT 搭配,统计唯一值数量;

在大表中要注意性能,必要时结合索引优化。

一句话记住: DISTINCT 是快速去重的利器,但也要分清场景,避免滥用。 🚀

💡 建议:在练习 SQL 时,可以自己建一张简单的 orders 表,多试试 DISTINCT 和 COUNT(DISTINCT ...),加深理解。