COUNT子查询获取不同所有者的重复账户时报错,求解决方法
问题:获取拥有不同所有者的重复账户SQL报错处理
需求:编写SQL获取所有拥有不同所有者的重复账户,当前代码第4行报错,无法得到预期结果。
预期结果
| ACCOUNTS | OWNERS |
|---|---|
| 204060 | HUGO TORREZ |
| 204060 | LUIS FLORES |
| 32565963 | ERICK LIRA |
| 32565963 | NOE PRIETO |
当前错误SQL代码
SELECT issuing_account, COUNT(1) FROM TBL_TXN WHERE 1 = 1 group by issuing_account HAVING COUNT(1) > 1 (SELECT DISTINCT OWNERS FROM TBL_TXN WHERE TRANSACTION_TYPE='B');
错误分析
- 语法错误:主查询与子查询之间缺少关联逻辑或关键字(如
JOIN、IN),导致SQL解析失败。 - 逻辑偏差:原代码仅统计账户的出现次数,未筛选拥有不同所有者的账户;且SELECT子句输出的是账户和计数,不符合预期结果的结构。
正确解法
方法1:子查询关联筛选
先找出存在多个不同所有者的账户,再关联原表获取对应的所有者信息:
SELECT t.issuing_account AS ACCOUNTS, t.OWNERS FROM TBL_TXN t JOIN ( SELECT issuing_account FROM TBL_TXN WHERE TRANSACTION_TYPE='B' GROUP BY issuing_account -- 筛选出至少有2个不同所有者的账户 HAVING COUNT(DISTINCT OWNERS) > 1 ) dup_accounts ON t.issuing_account = dup_accounts.issuing_account WHERE t.TRANSACTION_TYPE='B' ORDER BY t.issuing_account;
方法2:窗口函数实现
用窗口函数统计每个账户的不同所有者数量,再筛选符合条件的记录:
SELECT ACCOUNTS, OWNERS FROM ( SELECT issuing_account AS ACCOUNTS, OWNERS, COUNT(DISTINCT OWNERS) OVER (PARTITION BY issuing_account) AS owner_count FROM TBL_TXN WHERE TRANSACTION_TYPE='B' ) temp WHERE owner_count > 1 ORDER BY ACCOUNTS;
内容的提问来源于stack exchange,提问作者Salvador
相关产品推荐
相关产品推荐

