【问题标题】:SQL JOIN HOW TO correct make sql querySQL JOIN 如何更正使 sql 查询
【发布时间】:2020-04-07 21:18:56
【问题描述】:

我有两张桌子

  1. match_id、颜色、日期等(名称:匹配)

  2. match_id,player_id。等(namepalyer_matches)

第二张桌子可以有 10 个相同 match_id 的玩家。

我想进行 1 个 sql 查询来获取类似的表

match_id, player_id_1,player_id_2,player_id_3,etc,color,date

我尝试使用:

SELECT M.*, PM.player_id 
from matches M 
join player_matches P on M.match_id = P.match_id

但只收到 1 个 player_id。如何进行正确的 sql 查询以获得正确的结果?

【问题讨论】:

    标签: sql join group-by pivot


    【解决方案1】:

    您可以使用row_number() 和条件聚合:

    select 
        match_id,
        max(case when pm.rn = 1 then pm.player_id end) player_id_01,
        max(case when pm.rn = 2 then pm.player_id end) player_id_02,
        ...
        max(case when pm.rn = 10 then pm.player_id end) player_id_10,
        m.color,
        m.date
    from matches m
    inner join (
        select pm.*, row_number() over(partition by match_id order by player_id) rn 
        from player_matches pm
    ) pm on pm.match_id = m.match_id
    group by m.match_id, m.color, m.date
    

    这会在每场比赛中生成一条记录,列中最多有 10 名球员,按球员 ID 排序。

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 2019-03-30
      相关资源
      最近更新 更多