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

请求生成SQL查询:按PId/PDId/Emp分组,含FALSE则聚合为FALSE

需求与SQL解决方案

原始表结构

FFIdPIdPDIdEmpOperating
88530228161090Atrue
87130228161090Afalse
83974657196989Atrue
839746571961094Atrue
782399442901176Atrue
796399442901176Afalse

需求说明

按PId、PDId、Emp字段分组:

  • 若分组内Operating字段存在false值,则该分组所有记录的New Operating字段为false
  • 若分组内Operating字段全为true,则New Operating字段为true

期望结果

FFIdPIdPDIdEmpOperatingNew Operating
88530228161090Atruefalse
87130228161090Afalsefalse
83974657196989Atruetrue
839746571961094Atruetrue
782399442901176Atruefalse
796399442901176Afalsefalse

SQL查询语句

方案1:窗口函数实现(推荐,支持MySQL 8+、PostgreSQL、SQL Server等)

SELECT 
    FFId,
    PId,
    PDId,
    Emp,
    Operating,
    MIN(Operating) OVER (PARTITION BY PId, PDId, Emp) AS `New Operating`
FROM 
    your_table_name;

逻辑说明:布尔值在聚合计算中会被转换为1(true)和0(false),MIN()函数会提取分组内的最小值。只要分组里存在false(0),结果就是false;全为true时结果为true,完全匹配需求。

方案2:子查询关联实现(兼容低版本数据库)

SELECT 
    t1.FFId,
    t1.PId,
    t1.PDId,
    t1.Emp,
    t1.Operating,
    CASE WHEN t2.has_false = 1 THEN false ELSE true END AS `New Operating`
FROM 
    your_table_name t1
JOIN (
    SELECT 
        PId,
        PDId,
        Emp,
        MAX(CASE WHEN Operating = false THEN 1 ELSE 0 END) AS has_false
    FROM 
        your_table_name
    GROUP BY 
        PId, PDId, Emp
) t2 ON t1.PId = t2.PId AND t1.PDId = t2.PDId AND t1.Emp = t2.Emp;

逻辑说明:子查询先按分组字段统计是否存在false值,再关联回原表,通过CASE语句生成目标字段。

注意:请将语句中的your_table_name替换为实际表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:42:33