⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

SQL DISTINCT 去重

学习 DISTINCT 和 COUNT DISTINCT · 难度:入门 · +10XP

SQL DISTINCT 去重

在数据库查询中,经常会遇到重复数据的问题。例如学生表中同一个学生可能被录入多次,或者你想知道班级里有多少个不同的年龄值。SQL 提供了 DISTINCT 关键字来帮助我们去除查询结果中的重复行,只返回唯一值。

DISTINCT 基本语法

DISTINCT 放在 SELECT 之后、列名之前,表示对该列(或多列)进行去重操作:

SELECT DISTINCT 列名 FROM 表名;
SELECT DISTINCT 列1, 列2 FROM 表名;

当指定多个列时,DISTINCT 会对列的组合进行去重,即只有当所有指定列的值都相同时,才视为重复行。

实际示例

假设有一个 students 表,包含 id、name、age 和 score 字段:

-- 查询所有不重复的年龄
SELECT DISTINCT age FROM students;

-- 查询年龄和分数的唯一组合 SELECT DISTINCT age, score FROM students;

-- 查询不同城市的数量 SELECT COUNT(DISTINCT city) FROM students;

COUNT + DISTINCT 组合

DISTINCT 常常与 COUNT 聚合函数搭配使用,用来统计不重复值的个数。这在数据分析中非常有用:

-- 统计有多少个不同的年龄值
SELECT COUNT(DISTINCT age) FROM students;

-- 统计有多少个不同的年龄段 SELECT COUNT(DISTINCT CASE WHEN age<20 THEN '少年' ELSE '青年' END) FROM students;

DISTINCT 与 GROUP BY 的区别

虽然 DISTINCT 和 GROUP BY 都能实现去重,但它们的应用场景不同:

特性DISTINCTGROUP BY
主要用途仅去除重复行分组 + 聚合计算
能否使用聚合函数不直接支持支持(COUNT/SUM/AVG等)
执行顺序在 SELECT 之后去重先分组再聚合

DISTINCT 与 ORDER BY 配合

你可以在使用 DISTINCT 的同时对结果进行排序:

SELECT DISTINCT age FROM students ORDER BY age DESC;
SELECT DISTINCT city FROM users ORDER BY city;

注意事项

  1. DISTINCT 会对所有选择的列进行去重,而非仅对第一列
  2. DISTINCT 关键字必须紧跟在 SELECT 之后
  3. 在大数据量表上使用 DISTINCT 可能影响查询性能,因为数据库需要排序或哈希来去重
  4. NULL 值在 DISTINCT 中被视为相同的值,结果中只保留一个 NULL
  5. DISTINCT 不是函数,不要写成 SELECT DISTINCT(age),正确写法是 SELECT DISTINCT age

实战任务

给定 students 表,请完成以下查询:

  1. 查询所有不重复的分数值
  2. 统计有多少种不同的年龄
  3. 按分数降序排列,查询不重复的姓名和分数组合
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 146 篇
0 完成
🔥 0