如何解决在SQL中,当可能有两个不同的观察结果时,如何选择唯一的用户ID?
我有一张表,其中包含“个人名称”和“国籍”。一个人可能具有双重国籍,但是如果他们具有美国国籍,我只想为那个人划一排。
例如:\
Name Citizenship\
John US\
John England\
Jim Germany\
Mark US\
Mark Belgium
预期产量
Name Country\
John US\
Jim Germany\
Mark US
提前感谢您的帮助。
解决方法
您可以使用ROW_NUMBER()
窗口功能,如下所示:
select *
from (
select name,citizenship,row_number() over(partition by name
order by case when citizenship = 'US' then 1 else 2 end,citizenship
) as rn
from t
) x
where rn = 1
,
使用NOT EXISTS
:
select t.* from tablename t
where t.citizenship = 'US'
or not exists (select 1 from tablename where name = t.name and citizenship = 'US')
或带有FIRST_VALUE()
窗口功能:
select distinct name,first_value(citizenship)
over (partition by name order by case when citizenship = 'US' then 1 else 2 end) citizenship
from tablename
请参见demo。
结果:
> Name | Citizenship
> :--- | :----------
> John | US
> Jim | Germany
> Mark | US
,
这是一种味道:
SELECT DISTINCT
Name,Citizenship= CASE WHEN COUNT(CASE WHEN Citizenship = 'US' THEN 1 ELSE 0 END) OVER (PARTITION BY Name) > 1 THEN 'US' ELSE Citizenship END
FROM
t
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。