根据特定标准选择唯一行数

时间:2014-02-27 11:45:44

标签: sql postgresql unique

我正试图找到每个地区的唯一名称。我有一个(长)名单和地区列表,我想知道哪个名称只出现在一个地区。

我怎样才能有效地做到这一点?

数据如下所示:

name - region - ... 
Merlangius merlangus - North Atlantic - ... 
Gadus morhua - North Atlantic - ... 
Limanda limanda - North Atlantic - ... 
Merlangius merlangus - North Atlantic - ... 
Limanda limanda - South Atlantic - ...

输出应该给出仅在该区域中出现的物种的名称和区域。在这种情况下,它应该导致类似这样的事情:

name - region - ... 
Merlangius merlangus - North Atlantic - ... 
Gadus morhua - North Atlantic - ... 

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用GROUP BYHAVING条款。

实际上你可以这样做

create table test(name varchar(10),region varchar(10));

insert into test values('Joe','US');
insert into test values('Bill','US');
insert into test values('Joe','UK');
insert into test values('Stu','US');
insert into test values('Stu','UK');

Select name from test where name not in (
Select name
From (
select name,row_number() over(partition by region order by name) as rn
from test
)z
where z.rn>1
 )

<强>输出

比尔

这是SQL Fiddle DEMO