在 SQL 中,DISTINCT 用于对查询结果去重,它会移除结果集中完全相同的行。
SELECT DISTINCT 列1, 列2, ...
FROM 表名;
SELECT DISTINCT dept_id
FROM employee;
➡ 返回所有不重复的 dept_id
DISTINCT 是对所有选中列的组合去重,而不是单独对某一列。
SELECT DISTINCT name, dept_id
FROM employee;
➡ 只有当 name + dept_id 完全相同时,才会被去重
SELECT DISTINCT name, salary
FROM employee;
这不是“按 name 去重”,而是“按 name + salary 去重”。
SELECT DISTINCT dept_id, COUNT(*)
FROM employee
GROUP BY dept_id;
(这里通常不需要 DISTINCT,GROUP BY 已去重)
DISTINCT 做不到,需要用:
SELECT name, MAX(salary)
FROM employee
GROUP BY name;
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY name ORDER BY salary DESC) rn
FROM employee
) t
WHERE rn = 1;
GROUP BY 所有选中列如果你有具体 SQL 场景(比如“按某列去重但保留最新记录”),可以发出来,我帮你写最优写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。