我有一个表人(id,name,city)。
我想返回每个城市只有一个人的人的记录(城市应该是唯一的)。
例如,如果有 10 条记录,其中 3 条城市 = 'Mumbai',其他 3 条城市 = 'New York',其余 4 条城市 = 'Chicago',那么我想返回 3 条记录(每个城市一条)。
我尝试了各种方法,包括 DISTINCT、ROWNUM,但没有得到想要的结果。
谁能告诉我如何实现这一目标?
如果你的意思是你想返回那些只有一个人列出的城市......
Select Max(ID), max(name), City, count(city)
From Person
Group by City
Having count(City) = 1
如果您的意思是要返回不同的城市列表...
SELECT city
FROM Person
GROUP BY city
如果您的意思是要返回一个城市中的所有人员,但只列出该城市一次……您希望看到什么结果?如果您需要人名/ID,这是不可能的,因为您的记录在 2 个不同的城市有 3 个用户,在最后一个城市有 4 个用户。那么您希望在结果中看到什么“人”... 那么在孟买有 A、B、C... 您希望该城市看到什么结果?
无论哪个城市,您都想要一排?
select city,id, name
from
(select city, id, name,
row_number() over (partition by city order by id) as rn
from Person
) dt
where rn = 1
这将返回每个城市 ID 最低的行。
尝试这个:-
select city,id, name
from Person
group by city
order by city
这可能是你要找的吗?一条记录,计算每个城市有多少个名字?
select city,count(*) as COUNT
from Person
group by city
order by city