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

解决查询重复玩家时结果中玩家位置被交换的问题

解决玩家重复数据查询的位置交换问题

原查询的问题在于:子查询通过LEAST和GREATEST统一玩家对的顺序来统计重复,但关联时会让原记录与分组后的统一顺序玩家对匹配,导致部分记录的分组后玩家顺序与原记录相反。

要保留原记录的player1和player2顺序,同时显示该玩家对的重复次数,可修改查询如下:

select 
    s.id,
    s.player1,
    s.player2,
    LEAST(s.player1, s.player2) as least_player,
    GREATEST(s.player1, s.player2) as greatest_player,
    t.qty
from users s
join (
    select 
        LEAST(player1, player2) as pair_min,
        GREATEST(player1, player2) as pair_max, 
        count(*) as qty
    from users
    group by pair_min, pair_max
    having count(*) > 1
) t on t.pair_min = LEAST(s.player1, s.player2) 
   and t.pair_max = GREATEST(s.player1, s.player2)

说明:

  1. 子查询依然按玩家对的最小/最大标识分组统计重复次数,确保(p1,p2)和(p2,p1)被视为同一组;
  2. 主查询保留原记录的player1和player2顺序,同时新增least_player和greatest_player列展示统一的玩家对标识;
  3. 关联条件通过计算原记录的最小/最大玩家与子查询的分组标识匹配,确保每条重复记录都能关联到正确的统计结果,且原玩家顺序不被修改。

如果需求是仅显示原玩家顺序与统一最小/最大顺序一致的记录,可在主查询末尾添加过滤条件:

where s.player1 = LEAST(s.player1, s.player2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:35:13