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

SQL识别删除表中手机号重复数据时count语法错误如何解决

报错原因
  • 语法错误:CASE WHEN语句结构不完整,标准语法为CASE WHEN 判断条件 THEN 返回值 ELSE 其他返回值 END,你的代码中缺失THEN关键字,也没有END闭合语句,直接触发语法报错。
  • 逻辑错误:聚合函数COUNT()需要搭配GROUP BY指定分组维度才能正常使用,你当前代码未指定分组规则,HAVING的筛选逻辑也无法实现「每个手机号保留一条记录」的需求。
正确实现代码

使用窗口函数可以同时实现手机号去重、新增重复标记的需求,代码如下:

WITH client_rank AS (
    SELECT 
        cc.id,
        cc."FirstName",
        cc."LastName",
        cc."PhoneNumber" AS phone_number,
        cc."CreationDate",
        -- 统计同手机号的总记录数,用于判断是否重复
        COUNT(*) OVER(PARTITION BY cc."PhoneNumber") AS phone_total,
        -- 同手机号按id升序排序,取第一条即可实现去重
        ROW_NUMBER() OVER(PARTITION BY cc."PhoneNumber" ORDER BY cc.id ASC) AS rn
    FROM souscritootest.public.clients_crm cc
)
SELECT 
    id,
    "FirstName",
    "LastName",
    phone_number,
    "CreationDate",
    -- 标记重复:同手机号总记录数>1则标1,否则标0
    CASE WHEN phone_total > 1 THEN 1 ELSE 0 END AS is_duplicate
FROM client_rank
-- 每个手机号仅保留排序为1的一条记录
WHERE rn = 1;

如果需要按创建日期保留最新的记录,只需将ROW_NUMBER()的排序规则改为ORDER BY cc."CreationDate" DESC即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:18:03