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

新手SQL求助:用多行函数筛选FName_LVL1与LName_LVL1重复数据

解决SQL中筛选重复姓名组合的需求

嘿,刚接触SQL不用慌,这个找重复组合的需求其实很常见,咱们用两种实用的方法来搞定:

方法一:子查询关联法

这种方法兼容性拉满,几乎所有SQL数据库都支持。思路是先揪出重复的FName_LVL1 + LName_LVL1组合,再把原表和这些组合关联,就能拿到所有属于重复组合的行:

-- 记得把your_table替换成你的实际表名
SELECT t.*
FROM your_table t
INNER JOIN (
    -- 先找出出现次数超过1次的姓名组合
    SELECT FName_LVL1, LName_LVL1
    FROM your_table
    GROUP BY FName_LVL1, LName_LVL1
    HAVING COUNT(*) > 1
) dup 
ON t.FName_LVL1 = dup.FName_LVL1 
AND t.LName_LVL1 = dup.LName_LVL1
ORDER BY t.id;

方法二:窗口函数法(更简洁直观)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server这些),这个写法更清爽——直接给每行标记它所属组合的总行数,再筛选出重复的就行:

-- 替换your_table为你的实际表名
SELECT id, FName_LVL1, LName_LVL1, FName_LVL2, LName_LVL2
FROM (
    SELECT *,
           -- 按姓名组合分组,计算每组的总记录数
           COUNT(*) OVER (PARTITION BY FName_LVL1, LName_LVL1) AS group_count
    FROM your_table
) t
-- 只保留组内记录数大于1的条目
WHERE group_count > 1
ORDER BY id;

用你给的示例数据测试的话,两种方法都会返回以下结果:

idFName_LVL1LName_LVL1FName_LVL2LName_LVL2
1JohnKennedyMarcGuy
2JohnKennedyOlivierOslo

完全符合你“仅保留该组合重复条目”的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:47:19