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

SQL数据处理需求:转换教练状态并统计总数及各状态数量

解决方案:实现教练状态标记与统计列需求

方案1:使用子查询(兼容所有SQL方言)

SELECT 
    id,
    type,
    CASE 
        WHEN status IN (1.0, TRUE) THEN 'Active'
        ELSE 'Inactive'
    END AS Status,
    -- 统计教练总数量
    (SELECT COUNT(*) FROM your_table WHERE type = 'coach') AS totalcount,
    -- 统计对应状态的教练数量
    CASE 
        WHEN status IN (1.0, TRUE) THEN 
            (SELECT COUNT(*) FROM your_table WHERE type = 'coach' AND status IN (1.0, TRUE))
        ELSE 
            (SELECT COUNT(*) FROM your_table WHERE type = 'coach' AND status NOT IN (1.0, TRUE))
    END AS `status count`
FROM your_table
WHERE type = 'coach';

方案2:使用窗口函数(高效,适用于MySQL 8+、PostgreSQL、SQL Server等)

窗口函数避免了重复子查询,数据量大时性能更优:

SELECT 
    id,
    type,
    CASE 
        WHEN status IN (1.0, TRUE) THEN 'Active'
        ELSE 'Inactive'
    END AS Status,
    -- 全局统计所有教练数量
    COUNT(*) OVER () AS totalcount,
    -- 按状态分组统计对应数量
    COUNT(*) OVER (
        PARTITION BY CASE WHEN status IN (1.0, TRUE) THEN 'Active' ELSE 'Inactive' END
    ) AS `status count`
FROM your_table
WHERE type = 'coach';

关键逻辑说明

  1. 状态列生成:通过CASE判断status是否为1.0或True,标记为Active或Inactive,同时过滤出type='coach'的记录。
  2. totalcount列:统计所有教练的总数量,两种方案分别用子查询和全局窗口函数实现。
  3. status count列:根据当前行的状态,统计对应状态的教练总数,子查询方案通过条件子查询实现,窗口函数方案通过PARTITION BY按状态分组统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:50:26