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

如何用单SELECT语句查询DETAILS表中仅为B类型的客户

仅查询专属B类型客户的单SELECT实现方案

完全可以不用两个独立的SELECT语句实现需求,以下是几种简洁的单条SQL写法:

方法1:GROUP BY + 聚合条件筛选

这是最直接的无嵌套方案,纯单SELECT完成:

SELECT customer_id
FROM DETAILS
GROUP BY customer_id
HAVING COUNT(DISTINCT type) = 1 AND MAX(type) = 'B';

逻辑说明:按customer_id分组后,通过HAVING子句同时判断两个核心条件——该客户的类型唯一(排除同时拥有A、B的情况),且唯一的类型为B,直接筛选出仅属于B类型的客户。

方法2:WHERE + 子查询排除(单条SQL语句)

如果允许使用子查询(整体仍为单条SQL),也可以用以下写法:

SELECT DISTINCT customer_id
FROM DETAILS
WHERE type = 'B'
AND customer_id NOT IN (SELECT customer_id FROM DETAILS WHERE type = 'A');

逻辑说明:先筛选出所有类型为B的客户,再排除掉同时存在类型A的客户,最终得到仅属于B类型的结果。

方法3:窗口函数统计类型数量

利用窗口函数为每条记录标记所属客户的类型总数,再筛选符合条件的记录:

SELECT DISTINCT customer_id
FROM (
    SELECT customer_id,
           COUNT(DISTINCT type) OVER (PARTITION BY customer_id) AS type_count,
           type
    FROM DETAILS
) t
WHERE type_count = 1 AND type = 'B';

逻辑说明:通过窗口函数统计每个客户的类型种类数,之后筛选出类型总数为1且类型为B的客户ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:55:21