高效筛选满足多PARTNER且ADDRS_NUM不同的ACCOUNT的SQL方法
解决方案:筛选符合条件的ACCOUNT
数据示例
| ACCOUNT | PARTNER | ADDRS_NUM |
|---|---|---|
| HL124 | 2341 | ASD123 |
| HL124 | 2341 | SDF234 |
| HL124 | 234N | SDF234 |
| HG225 | 45BV | QWE345 |
| HG225 | 72AA | QWE345 |
| UY150 | 8846 | CCC204 |
需求说明
需要筛选出同时满足以下两个条件的ACCOUNT:
- 该ACCOUNT关联多个不同的PARTNER
- 该ACCOUNT下的ADDRS_NUM存在不同值
示例数据中仅HL124符合要求。
原查询问题分析
你之前写的窗口函数查询存在两个核心问题:
- 未使用
DISTINCT,COUNT()统计的是总行数而非不同值的数量,无法判断是否存在多个不同的PARTNER或ADDRS_NUM - 窗口函数会为每一行返回统计结果,导致数据量冗余,不仅结果不符合预期,还会增加查询耗时
高效SQL解决方案
使用GROUP BY配合聚合函数直接按ACCOUNT分组统计,只返回符合条件的账户,效率更高:
SELECT ACCOUNT FROM your_table_name GROUP BY ACCOUNT HAVING COUNT(DISTINCT PARTNER) > 1 AND COUNT(DISTINCT ADDRS_NUM) > 1;
优化建议
如果表数据量较大,可以给(ACCOUNT, PARTNER)和(ACCOUNT, ADDRS_NUM)创建复合索引,让数据库直接通过索引统计不同值的数量,避免全表扫描,进一步提升查询速度。
内容的提问来源于stack exchange,提问作者team 9
相关产品推荐
相关产品推荐

