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

MySQL:如何提取同一tranxId下type重复出现的记录及统计次数

解决MySQL重复交易类型记录统计的问题

没问题,针对你这个需求,我给你整理了两种实用的SQL写法,完全匹配你要的输出格式:

方法一:直接分组统计(推荐,简洁高效)

这个写法直接通过分组和筛选,得到每个tranxId下出现次数超过1次的type及其次数,输出结果和你给出的示例完全一致:

SELECT tranxId, type, COUNT(*) AS occurrence_count
FROM xyz
-- 可选:如果表中可能存在非credit/debit的type值,加上这句过滤更严谨
WHERE type IN ('credit', 'debit')
GROUP BY tranxId, type
HAVING COUNT(*) > 1
ORDER BY tranxId, type;

逻辑说明:

  • GROUP BY tranxId, type:把相同交易ID和交易类型的记录归为一组
  • COUNT(*):统计每组内的记录数量,也就是该tranxId下对应type的出现次数
  • HAVING COUNT(*) > 1:只保留出现次数超过1次的分组
  • ORDER BY:让结果按交易ID和类型排序,看起来更整齐

方法二:保留原表所有字段(如需查看具体记录)

如果你不仅需要统计次数,还想看到每条符合条件的原始记录,可以用窗口函数实现:

SELECT id, tranxId, type, occurrence_count
FROM (
    SELECT 
        id, tranxId, type,
        -- 窗口函数计算每个tranxId+type组合的总次数
        COUNT(*) OVER (PARTITION BY tranxId, type) AS occurrence_count
    FROM xyz
    WHERE type IN ('credit', 'debit')
) AS sub_query
WHERE occurrence_count > 1
ORDER BY tranxId, type;

逻辑说明:

  • 内层子查询用PARTITION BY tranxId, type给每条记录标记它所属组的总次数
  • 外层筛选出次数大于1的记录,这样你能同时看到原始的id字段和对应的统计次数

这两种写法都能满足你的需求,根据实际场景选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:23:22