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

如何在SQL Group By查询中添加布尔表达式列检测产品是否含指定材质?

解决方案

你的原查询存在两个核心问题:

  • EXISTS子查询未关联主查询的Product字段,导致只要表中存在任意一条Black材质的数据,所有产品的Contains_Black都会返回1,无法实现按产品单独判断的需求。
  • 未对Product进行分组或去重,最终会返回原表所有行,而非每个产品一行的预期结果。

以下是几种可行的正确查询写法:

方法一:GROUP BY + MAX(CASE...)(推荐,逻辑直观)

通过分组后对每个产品的材质进行判断,取最大值来标记是否包含Black:

SELECT
    Product,
    MAX(CASE WHEN Material = 'Black' THEN 1 ELSE 0 END) AS Contains_Black
FROM Table1
GROUP BY Product;

方法二:关联EXISTS + 去重/分组

修正原有的自关联逻辑,添加Product关联条件,再通过DISTINCT或GROUP BY得到唯一产品行:

用DISTINCT去重

SELECT DISTINCT
    A.Product,
    CASE
        WHEN EXISTS (
            SELECT 1
            FROM Table1 AS B
            WHERE B.Product = A.Product AND B.Material = 'Black'
        ) THEN 1
        ELSE 0
    END AS Contains_Black
FROM Table1 AS A;

用GROUP BY分组

SELECT
    A.Product,
    CASE
        WHEN EXISTS (
            SELECT 1
            FROM Table1 AS B
            WHERE B.Product = A.Product AND B.Material = 'Black'
        ) THEN 1
        ELSE 0
    END AS Contains_Black
FROM Table1 AS A
GROUP BY A.Product;

方法三:窗口函数(适用于支持窗口函数的数据库,如MySQL 8+、PostgreSQL等)

通过窗口函数按产品分区计算最大值,再去重得到结果:

SELECT DISTINCT
    Product,
    MAX(CASE WHEN Material = 'Black' THEN 1 ELSE 0 END) OVER (PARTITION BY Product) AS Contains_Black
FROM Table1;

内容的提问来源于stack exchange,提问作者Jesús Antonio Martinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:45:30