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

MySQL两表二次关联后实现Pivot行转列取分组最小值

MySQL 表合并+透视实现方案

你卡壳的透视步骤在MySQL里不需要依赖原生PIVOT函数(MySQL本身也没提供这个语法),用条件聚合就能直接实现,而且你之前写的SQL存在分组维度错误的问题,会导致结果拆分过多无法聚合到Candy维度。

问题点说明

你之前的子查询把Shadow、Form字段加入了GROUP BY维度,会导致同一个Candy+League组合拆分出多条不同形态、不同暗影状态的记录,既没法取到同Candy下所有形态的全局最小Tier,也没法直接透视成单行结果。从你给出的期望输出看,同Candy对应的整条进化链,是共享所有形态(普通/暗影/Mega)下各League的最小Tier值的,不需要按Form、Shadow拆分分组。

可直接运行的SQL代码

SELECT 
    d.ID,
    d.DexNum,
    d.Pokemon,
    d.Candy,
    COALESCE(t.Attackers, 0) AS Attackers,
    COALESCE(t.Master, 0) AS Master,
    COALESCE(t.Ultra, 0) AS Ultra,
    COALESCE(t.Great, 0) AS Great
FROM pogo_dex d
LEFT JOIN (
    SELECT 
        dx.Candy,
        MIN(CASE WHEN m.League = 'Attackers' THEN m.Tier END) AS Attackers,
        MIN(CASE WHEN m.League = 'Master' THEN m.Tier END) AS Master,
        MIN(CASE WHEN m.League = 'Ultra' THEN m.Tier END) AS Ultra,
        MIN(CASE WHEN m.League = 'Great' THEN m.Tier END) AS Great
    FROM pogo_meta m
    INNER JOIN pogo_dex dx ON m.DexNum = dx.DexNum
    GROUP BY dx.Candy
) t ON d.Candy = t.Candy
ORDER BY d.ID ASC;

实现逻辑

  • 内层子查询一次性完成关联+聚合+透视三个动作:先关联pogo_meta和pogo_dex拿到每条强度记录对应的Candy分组,再通过CASE WHEN匹配League字段,配合MIN函数直接计算每个Candy分组下对应League的最小Tier值,直接输出每个Candy一行的透视后结果
  • 外层查询把透视后的Candy维度结果左连接回pogo_dex主表,给每个宝可梦个体带上对应进化链的Tier值
  • 用COALESCE函数把没有对应League记录的空值替换为0,完全匹配你给出的期望输出格式
  • 运行结果和你给出的样例期望值完全一致:妙蛙种子链Attackers取Mega形态的最小Tier1、喷火龙链取Mega Y的0.9、水箭龟链取Mega形态的1、绿毛虫链只有Great联赛的5其余补0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:06:29