按 ID 分组并按条件过滤 - 如果有则将它们标记为其他

group by ID and filter by condition - if something then mark them as something else

在我的查询中,我现在正在接收可以重复的 ID 和状态,所以我想按 ID 分组,但是如果 any 行的状态为 ACTIVE那么它应该显示为 ACTIVE。

我有这样的东西:

我想以这样的方式结束:

您只需要聚合函数 MIN(),当 id 的两个值都存在时,它将 return ACTIVE,因为被认为小于 CANCELLED ]:

SELECT id, MIN(status) status
FROM tablename
GROUP BY id;

一个不依赖于这些特定字符串比较的更通用的解决方案是 GROUP_CONCAT():

SELECT id, 
       SUBSTRING_INDEX(
         GROUP_CONCAT(status ORDER BY status = 'ACTIVE' DESC),
         ',', 
         1
       ) status
FROM tablename
GROUP BY id;

参见demo