Incimo 2020-08-26 17:44 采纳率: 100%
浏览 178
已采纳

mysql 分组时根据优先级显示

需要实现的是,分组前每种场景有多种颜色(红色,黄色,蓝色)
优先级为 红>黄>蓝
比如 下面:食材保鲜’在众多蓝色中有一个黄色,希望实现分组后‘食材保鲜’显示的是黄色

图片说明

期望结果

图片说明

  • 写回答

2条回答 默认 最新

  • jingluan666 2020-08-26 19:46
    关注

    我的理解是,按场景名称和食堂名称分组,如果有多个蓝色则认为其是黄色,最终显示还是按场景名称和食堂名称分组,每组只显示优先级最高的那个颜色

    SELECT 场景名称,食堂名称,
    CASE WHEN 优先级=3 THEN '红色' WHEN 优先级=2 THEN '黄色' ELSE '蓝色' END AS 显示颜色
    FROM
    (
      SELECT 场景名称,食堂名称,MAX(优先级) AS 优先级
        FROM
        (
            SELECT 场景名称,食堂名称,显示颜色,
            CASE WHEN 显示颜色='红色' THEN 3 WHEN 显示颜色='黄色' THEN 2 ELSE 1 END AS 优先级
            FROM
            (
                SELECT 场景名称,食堂名称,
                CASE WHEN 显示颜色='蓝色' AND 颜色数量>1 THEN '黄色' ELSE 显示颜色 END AS 显示颜色
                FROM
                (
                    SELECT 场景名称,食堂名称,显示颜色,COUNT(1) AS 颜色数量
                    FROM 食堂
                    GROUP BY 场景名称,食堂名称,显示颜色
                ) AS T1
            ) AS T2 
        ) AS T3
        GROUP BY 场景名称,食堂名称
    ) AS T4
    ORDER BY 场景名称,食堂名称,显示颜色
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?