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

Oracle:将基础连接查询与COUNT/GROUP BY/HAVING查询结合

实现方案

方案1:先聚合再关联(性能更优)

先对Table2完成聚合筛选,再通过ID_NO关联Table1获取需要的字段。如果同一个账号组合对应多个ID_NO,可根据需求加DISTINCT去重:

SELECT DISTINCT t1.col1 AS Name,
       t2_agg.account AS Account,
       t2_agg.totals AS Totals
FROM (
    -- 先做Table2的聚合逻辑,同时保留ID_NO用于关联
    SELECT t2.ID_NO,
           t2.col1||t2.col2 AS account,
           COUNT(DISTINCT t2.col3) AS totals
    FROM Table2 t2
    GROUP BY t2.ID_NO, t2.col1, t2.col2
    HAVING COUNT(DISTINCT t2.col3) >=15
) t2_agg
INNER JOIN Table1 t1 
    ON t2_agg.ID_NO = t1.ID_NO

方案2:先连接再聚合(逻辑更直观)

直接基于原连接查询的逻辑,在关联后做聚合筛选:

SELECT t1.col1 AS Name,
       t2.col1||t2.col2 AS Account,
       COUNT(DISTINCT t2.col3) AS Totals
FROM Table1 t1
INNER JOIN Table2 t2 
    ON t1.ID_NO = t2.ID_NO
GROUP BY t1.col1, t2.col1, t2.col2
HAVING COUNT(DISTINCT t2.col3) >=15

注意事项

  • 原查询2存在语法错误,HAVING子句必须放在GROUP BY之后,上述代码已修正该问题。
  • 如果业务上一个col1||col2组合对应多个ID_NO,方案1中的DISTINCT可以按需保留或移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:30:20