按 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。
在我的查询中,我现在正在接收可以重复的 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。