You need to enable JavaScript to run this app. 使用COUNT CASE WHEN EXISTS实现SQL两表关联匹配计数列
优惠活动
大模型
产品
解决方案
定价
更多

使用COUNT CASE WHEN EXISTS实现SQL两表关联匹配计数列

需求实现方案

该需求完全可以通过SQL实现,也支持基于COUNT CASE WHEN EXISTS语法完成,同时提供性能更优的左连接聚合方案。


方案1:左连接+条件聚合(推荐)

这是生产环境最常用、执行性能最优的写法,直接通过关联匹配后统计行数:

SELECT 
    t1.CA,
    t1.D,
    COUNT(t2.D) AS `COUNT`,
    CONCAT('表2中CA为', t1.CA, '且D>=', t1.D, '的记录共', COUNT(t2.D), '条') AS EXPLANATION
FROM table1 t1
LEFT JOIN table2 t2 
    ON t1.CA = t2.CA 
    AND t1.D <= t2.D
GROUP BY t1.CA, t1.D;

逻辑说明

  • 用LEFT JOIN保证table1的所有行都保留,关联条件同时匹配CA相等、table2的D大于等于table1的D
  • COUNT统计非空的table2字段值,就是符合条件的匹配记录数
  • 最后用CONCAT拼接得到解释字段,完全匹配期望输出

方案2:COUNT+EXISTS相关语法实现

如果你需要指定用EXISTS类语法实现,也可以按如下方式编写:

SELECT 
    t1.CA,
    t1.D,
    (SELECT COUNT(*) FROM table2 t2 WHERE t2.CA = t1.CA AND t2.D >= t1.D) AS `COUNT`,
    CONCAT('表2中CA为', t1.CA, '且D>=', t1.D, '的记录共', 
        (SELECT COUNT(*) FROM table2 t2 WHERE t2.CA = t1.CA AND t2.D >= t1.D),
    '条') AS EXPLANATION
FROM table1 t1;

逻辑说明

  • 通过关联子查询逐行统计table1每行匹配到的table2的记录数
  • 写法更简洁不需要GROUP BY,但如果table1数据量很大,性能会低于左连接方案,适合小表统计场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 15:09:02