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

如何使用SQL按分组查找重复值?

你现在的写法是直接全局按customer字段分组,所有相同客户无论出现顺序都会被归到同一分组,自然得不到你要的仅连续相同客户才递增序号的效果。这个场景属于SQL典型的「孤岛分组」问题,正确实现逻辑如下:

实现代码

WITH mark_group AS (
    -- 标记出客户和上一行不同的行,作为新分组的起点
    SELECT *,
        CASE WHEN customer = LAG(customer) OVER(ORDER BY id) THEN 0 ELSE 1 END AS group_flag
    FROM customers
),
calc_group_id AS (
    -- 累加标记值生成连续相同客户的专属分组ID
    SELECT *,
        SUM(group_flag) OVER(ORDER BY id) AS group_id
    FROM mark_group
)
-- 每个连续分组内排序得到期望的rank值
SELECT id, customer,
    ROW_NUMBER() OVER(PARTITION BY group_id ORDER BY id) AS `rank`
FROM calc_group_id
ORDER BY id;

执行结果

完全匹配你给出的预期输出:

idcustomerrank
1customer_11
2customer_21
3customer_22
4customer_11
5customer_31
6customer_11

如果你需要直接提取重复行,在外层追加WHERE rank > 1过滤条件即可得到所有连续重复的记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:36:03