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

Oracle SQL查询:筛选Paychecks表中Employee_ID与Paycheck_nbr唯一匹配数据

筛选Paychecks表中每个Employee_ID对应唯一Paycheck_nbr的有效数据(Oracle SQL)

现有Paychecks表包含Employee_ID、Employee_Record、Paycheck_nbr三个字段,表中存在脏数据:同一Paycheck_nbr对应多个不同的Employee_ID。需要编写Oracle SQL语句,筛选出**每个Paycheck_nbr仅对应唯一Employee_ID**的有效记录。

脏数据示例

Employee_IDEmployee_RecordPaycheck_Nbr
123399
456299
789299

有效数据示例

Employee_IDEmployee_RecordPaycheck_Nbr
123197
456298
789399

解决方案1:分组统计关联法

先通过子查询筛选出仅对应单个员工的Paycheck_nbr,再关联原表获取完整记录:

SELECT p.*
FROM Paychecks p
INNER JOIN (
    SELECT Paycheck_nbr
    FROM Paychecks
    GROUP BY Paycheck_nbr
    HAVING COUNT(DISTINCT Employee_ID) = 1
) valid_paychecks 
ON p.Paycheck_nbr = valid_paychecks.Paycheck_nbr;

逻辑说明:子查询按Paycheck_nbr分组,统计每组内不同Employee_ID的数量,仅保留数量为1的薪资编号;再通过关联操作,从原表中取出这些有效薪资编号对应的所有记录。

解决方案2:窗口函数法

利用窗口函数直接标记每个Paycheck_nbr对应的员工数量,再筛选有效记录:

SELECT Employee_ID, Employee_Record, Paycheck_nbr
FROM (
    SELECT 
        p.*,
        COUNT(DISTINCT Employee_ID) OVER(PARTITION BY Paycheck_nbr) AS emp_count
    FROM Paychecks p
) filtered
WHERE emp_count = 1;

逻辑说明:窗口函数COUNT(DISTINCT Employee_ID) OVER(PARTITION BY Paycheck_nbr)会为每条记录计算其所属Paycheck_nbr对应的员工总数;外层查询筛选出总数为1的记录,即为有效数据。


内容的提问来源于stack exchange,提问作者Jessica J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:25:30