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

如何在主查询中引用子查询COUNT值并筛选计数为1的客户

主查询引用子查询COUNT值并过滤COUNT=1的客户

你可以通过以下几种方式实现需求:

方法1:将子查询作为派生表关联(推荐,效率更高)

先在子查询里过滤出COUNT值为1的客户,再将其作为派生表和主查询关联,主查询可直接引用统计值:

-- 假设主查询从客户主表获取信息,你可以替换成实际的主表/字段
SELECT main.*, sub.ship_count
FROM sysadm.PS_CUST_MAIN main
JOIN (
    SELECT 
        COUNT(SH2.CUST_ID) AS ship_count,
        SH2.CUST_ID
    FROM sysadm.PS_CUST_SHIPTO SH2
    GROUP BY SH2.CUST_ID
    HAVING COUNT(SH2.CUST_ID) = 1 -- 提前过滤,减少关联数据量
) sub ON main.CUST_ID = sub.CUST_ID

方法2:使用关联子查询

如果主查询本身基于PS_CUST_SHIPTO表,可在SELECT和WHERE中直接调用关联子查询获取COUNT值:

SELECT 
    SH1.*,
    -- 引用COUNT值作为字段
    (SELECT COUNT(SH2.CUST_ID) 
     FROM sysadm.PS_CUST_SHIPTO SH2 
     WHERE SH2.CUST_ID = SH1.CUST_ID) AS ship_count
FROM sysadm.PS_CUST_SHIPTO SH1
-- 过滤COUNT=1的客户
WHERE (SELECT COUNT(SH2.CUST_ID) 
       FROM sysadm.PS_CUST_SHIPTO SH2 
       WHERE SH2.CUST_ID = SH1.CUST_ID) = 1

注意:这种方式在数据量较大时,子查询会重复执行,效率不如方法1

方法3:使用CTE(公共表表达式)

用CTE提前计算出符合条件的COUNT值,主查询直接关联CTE即可,代码可读性更强:

WITH ship_counts AS (
    SELECT 
        COUNT(SH2.CUST_ID) AS ship_count,
        SH2.CUST_ID
    FROM sysadm.PS_CUST_SHIPTO SH2
    GROUP BY SH2.CUST_ID
    HAVING COUNT(SH2.CUST_ID) = 1
)
SELECT main.*, sc.ship_count
FROM sysadm.PS_CUST_MAIN main
JOIN ship_counts sc ON main.CUST_ID = sc.CUST_ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:22:18