求Oracle查询语句:筛选对应多个不同fund_id的account_id
Oracle 查询:筛选关联多个不同Fund_id的Account_id记录
原始数据集
假设数据存储在表account_funds中,数据如下:
account_id Fund_id ASC23454 765432 ASC67654 988776 ASC23454 899098 ASC23454 765787 ASC90878 899877 ASC90878 788978 ASC98765 889909 ASC09876 908990
需求
编写Oracle查询语句,仅保留那些关联了多个不同Fund_id的Account_id,同时输出这些Account_id对应的所有关联Fund_id记录。
解决方案
方法1:使用窗口函数(推荐)
窗口函数可直接在数据行上计算每个Account_id关联的不同Fund_id数量,再筛选符合条件的记录:
SELECT account_id, fund_id FROM ( SELECT account_id, fund_id, COUNT(DISTINCT fund_id) OVER (PARTITION BY account_id) AS distinct_fund_count FROM account_funds ) WHERE distinct_fund_count > 1 ORDER BY account_id, fund_id;
方法2:使用子查询分组筛选
先通过分组查询找出符合条件的Account_id,再关联原表获取对应记录:
SELECT af.account_id, af.fund_id FROM account_funds af INNER JOIN ( SELECT account_id FROM account_funds GROUP BY account_id HAVING COUNT(DISTINCT fund_id) > 1 ) qualified_accounts ON af.account_id = qualified_accounts.account_id ORDER BY af.account_id, af.fund_id;
预期输出
account_id Fund_id ASC23454 765432 ASC23454 899098 ASC23454 765787 ASC90878 899877 ASC90878 788978
内容的提问来源于stack exchange,提问作者nodev_101
相关产品推荐
相关产品推荐

