使用 IF 或 Case 在 MySQL 列中应用逻辑
Apply Logic In a MySQL Column with IF or Case
我遇到了这个问题,但我想不出继续下去的方法。所以,我有一个 table 假设有 3 个具有相同 ID 的条目和一个名为 status
的列,第一个条目的值为 active
,第二个条目的值为 [=最后一个是 13=] 和 paused
。请记住,逻辑应该应用在连接中,因为已经运行的查询非常大。
所以我想创建一个子查询来说明此 ID 是否至少有一个状态 active
return 状态 active
,如果没有状态 active
但有一个状态 paused
return 状态 paused
,否则 return 状态 inactive
.
我已经尝试将 IF()
和 group_concat()
用于所有状态以及 CASE
语句,但我没有得到所需的结果。
你猜对了吗? P.S:我正在使用 MySQL 5.6
您可以在此处使用条件聚合:
SELECT
id,
CASE WHEN SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) > 0
THEN 'active'
WHEN SUM(CASE WHEN status = 'paused' THEN 1 ELSE 0 END) > 0
THEN 'paused'
ELSE 'inactive' END AS status
FROM yourTable
GROUP BY id;
我遇到了这个问题,但我想不出继续下去的方法。所以,我有一个 table 假设有 3 个具有相同 ID 的条目和一个名为 status
的列,第一个条目的值为 active
,第二个条目的值为 [=最后一个是 13=] 和 paused
。请记住,逻辑应该应用在连接中,因为已经运行的查询非常大。
所以我想创建一个子查询来说明此 ID 是否至少有一个状态 active
return 状态 active
,如果没有状态 active
但有一个状态 paused
return 状态 paused
,否则 return 状态 inactive
.
我已经尝试将 IF()
和 group_concat()
用于所有状态以及 CASE
语句,但我没有得到所需的结果。
你猜对了吗? P.S:我正在使用 MySQL 5.6
您可以在此处使用条件聚合:
SELECT
id,
CASE WHEN SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) > 0
THEN 'active'
WHEN SUM(CASE WHEN status = 'paused' THEN 1 ELSE 0 END) > 0
THEN 'paused'
ELSE 'inactive' END AS status
FROM yourTable
GROUP BY id;