DISTINCT
SELECT DISTINCT 对查询结果去重,重复的行只保留一条。比如查"公司有哪些部门",员工表有 12 人但只分 3 个部门,直接 SELECT dept_code 会返回 12 行,大部分是重复的;加上 DISTINCT 就只返回 3 行。
DISTINCT 作用于 SELECT 后面所有列的组合。SELECT DISTINCT dept_code, join_year 返回的是"部门+年份"组合的去重结果,而不是分别对两列去重。如果只想对某一列去重,只 SELECT 那一列即可。
统计类查询几乎离不开 DISTINCT。飞翔科技的 HR 想知道"公司有多少个不同的入职年份",商品经理想知道"飞翔小店卖过多少种不同商品"——都是去重后计数的典型场景。
标准写法:
SELECT DISTINCT 列名1, 列名2
FROM 表名
WHERE 条件;
以飞翔科技为例:
-- 查公司有哪些部门(去重)
SELECT DISTINCT dept_code FROM employees;
-- 查有哪些"部门+入职年份"的独特组合
SELECT DISTINCT dept_code, join_year
FROM employees
ORDER BY dept_code, join_year;
-- 统计技术部有多少个不同的工资等级
SELECT DISTINCT salary_grade
FROM employees
WHERE dept_code = 2;
DISTINCT 搭配 COUNT 更强大:COUNT(DISTINCT dept_code) 一步到位算出公司有几个部门。