You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中查询每行首个值为1的列标识(L0/L1等)

问题需求

我数据库中有如下结构的action表,希望用SELECT语句获取每行中第一个值为1的列对应的标识:

  • 若一行存在多个值为1的列,取最先出现的那个列的标识(比如action_level_0对应L0,action_level_1对应L1,以此类推)
  • 示例:第一行对应L0,第五行对应L3

表的初始化SQL语句如下:

CREATE TABLE `action` (
  `action_id` BIGINT NOT NULL AUTO_INCREMENT,
  `action_level_0` SMALLINT DEFAULT NULL COMMENT 'L0',
  `action_level_1` SMALLINT DEFAULT NULL COMMENT 'L1',
  `action_level_2` SMALLINT DEFAULT NULL COMMENT 'L2',
  `action_level_3` SMALLINT DEFAULT NULL COMMENT 'L3',
   PRIMARY KEY (`action_id`)
) ENGINE=INNODB AUTO_INCREMENT=2;
INSERT INTO `action` 
(`action_level_0`,`action_level_1`,`action_level_2`,`action_level_3`)
VALUES
(1,0,0,0),
(0,1,0,0),
(0,0,1,0),
(0,0,0,1),
(0,0,0,1);

期望查询结果:

result
L0
L1
L2
L3
L3
解决方案

利用CASE WHEN语句的顺序判断特性,按列的先后顺序依次检查是否为1,第一个满足条件的就返回对应的标识:

SELECT
  CASE
    WHEN action_level_0 = 1 THEN 'L0'
    WHEN action_level_1 = 1 THEN 'L1'
    WHEN action_level_2 = 1 THEN 'L2'
    WHEN action_level_3 = 1 THEN 'L3'
    ELSE '0' -- 处理所有列都不为1的情况,对应你提到的第八行示例
  END AS result
FROM `action`;
结果验证

执行上述SQL后,会得到期望的结果:每行返回第一个值为1的列的标识,所有列都不为1时返回'0'。

内容的提问来源于stack exchange,提问作者Smile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:32:43