You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;

逻辑解释:

  1. 内层查询用PARTITION BY c_specialty按专长分组,计算每个分组(专长)下的顾问总数specialty_count
  2. 外层查询只保留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;

逻辑解释:

  1. 子查询先筛选出所有仅对应一个顾问的专长(HAVING COUNT(*) = 1)
  2. 把这个结果和原表关联,就能拿到这些专长对应的顾问记录

方案三: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:52:27