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

以上是 mysql 分组时根据优先级显示 的全部内容, 来源链接: utcz.com/a/40850.html

回到顶部