mysql 分组时根据优先级显示

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

图片说明

期望结果

图片说明

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

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 场景名称,食堂名称,显示颜色

先按照红黄蓝排序,再分组就是了