Oracle SQL Plus:如何筛选表中具有唯一专长的顾问记录?
Oracle SQL Plus 实现筛选唯一专长顾问的方案
嘿,针对你这个需求——从包含consultant_id和c_specialty的表中,找出那些专长唯一的顾问(也就是只有他一个人做这个专长的),这里有几个实用的Oracle SQL实现方案,你可以参考:
方案一:使用窗口函数(推荐,高效且直观)
窗口函数可以直接在原表上计算每个专长对应的顾问数量,然后筛选出数量为1的记录,写法简洁效率也高:
SELECT consultant_id, c_specialty FROM ( SELECT consultant_id, c_specialty, COUNT(*) OVER (PARTITION BY c_specialty) AS specialty_count FROM your_table_name -- 这里替换成你的实际表名 ) t WHERE specialty_count = 1;
逻辑解释:
- 内层查询用
PARTITION BY c_specialty按专长分组,计算每个分组(专长)下的顾问总数specialty_count - 外层查询只保留
specialty_count = 1的记录,也就是专长唯一的顾问
方案二:GROUP BY + 关联查询
先通过GROUP BY找出只有一个顾问的专长,再和原表关联获取对应的顾问信息:
SELECT t.consultant_id, t.c_specialty FROM your_table_name t JOIN ( SELECT c_specialty FROM your_table_name GROUP BY c_specialty HAVING COUNT(*) = 1 ) s ON t.c_specialty = s.c_specialty;
逻辑解释:
- 子查询先筛选出所有仅对应一个顾问的专长(
HAVING COUNT(*) = 1) - 把这个结果和原表关联,就能拿到这些专长对应的顾问记录
方案三:NOT EXISTS 子查询
通过子查询判断当前顾问的专长是否没有其他顾问拥有:
SELECT consultant_id, c_specialty FROM your_table_name t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.c_specialty = t1.c_specialty AND t2.consultant_id != t1.consultant_id );
逻辑解释:
对于每一条记录,检查是否存在其他顾问(t2.consultant_id != t1.consultant_id)和他拥有相同的专长,如果不存在,就保留这条记录,也就是专长唯一的顾问
以上三种方案都能得到你想要的结果(仅返回003对应的记录),你可以根据自己的表数据量和实际场景选择合适的写法~
内容的提问来源于stack exchange,提问作者Asim Sansi
相关产品推荐
相关产品推荐

