我在DB2中有两个表:
1) users ==> basic user details
2) details ==> more user details
“details”表包含名为ssn,company和super_company的列。 company和super_company列可以为同一个SSN提供多个值。
问题:我正在尝试仅提取与ssn具有相同super_company的用户。
我需要输出中的用户名,ssn和company_id。
我尝试了分组但不确定如何继续,因为我是DB2的新手。
SQL小提琴: http://www.sqlfiddle.com/#!2/6d378/1/0
请注意,sql fiddle不支持DB2。我提供的只是提供表结构。
答案 0 :(得分:1)
您可以使用此查询
select U.account_id, U.username from users U
join details D
on U.account_id = D.account_id
group by U.account_id, U.username
having count(distinct super_company) = 1
答案 1 :(得分:1)
您说输出中需要company
,但是当有多家公司时您没有说要做什么。这是一种方法,每个用户输出一行任意公司:
select u.username, u.accound_id, d.ssn as ssn,
min(d.company) as company, min(d.super_company)
from users u join
details d
on u.accound_id = d.accound_id
group by u.username, u.accound_id
having min(d.super_company) = max(d.super_company);
实际上将多个company
值聚合到一个字符串中比在DB2中应该更难。您也可以获取匹配用户的个人记录。我会使用窗口函数来执行此操作:
select username, accound_id, ssn, company, super_company
from (select u.username, d.*,
min(super_company) over (partition by ssn) as minsc,
max(super_company) over (partition by ssn) as maxsc
from users u join
details d
on u.accound_id = d.accound_id
) t
where minsc = maxsc;
这更接近您的具体问题,即ssn
的重复问题,因为在查找重复项时,它不包括username
和accound_id
。
答案 2 :(得分:0)
select d.*, u.*
from details d
join users u
on u.accound_id = d.accound_id
join (
select accound_id
from details
group by accound_id
having count(distinct super_company) = 1
) x
on x.accound_id = u.accound_id