【问题标题】:group by ID and filter by condition - if something then mark them as something else按 ID 分组并按条件过滤 - 如果有,则将它们标记为其他
【发布时间】:2022-01-12 13:48:11
【问题描述】:

在我现在的查询中,我收到了可以重复的 ID 和状态,所以我想按 ID 分组,但如果 任何 行的状态为 ACTIVE,那么它应该显示为 ACTIVE .

我有这样的事情:

我想以这样的方式结束:

【问题讨论】:

  • mark as 1 else 0 在哪里出现?
  • @P.Salmon 对不起,我改了

标签: mysql group-by min group-concat


【解决方案1】:

您所需要的只是聚合函数MIN(),当id 的两个值都存在时,它将返回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。

【讨论】:

  • 太棒了!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 2021-10-30
  • 2018-01-23
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
相关资源
最近更新 更多