我有一个看似简单的问题,但我无法弄明白。
我有以下几点:
Name Zipcode
ER 5354
OL 1234
AS 1234
BH 3453
BH 3453
HZ 1234
我想找到那些ID没有明确定义一行的行。
所以我想在这里看到:
OL 1234
AS 1234
HZ 1234
或者仅仅是邮政编码。
对不起,我忘了提到一个重要的部分。如果名称相同则不是问题,只有相同的邮政编码有不同的名称。 所以这意味着:BH 3453不会返回
答案 0 :(得分:7)
我认为这就是你想要的
select zipcode
from yourTable
group by zipcode
having count(*) > 1
选择与多个记录关联的zipcodes
回答您更新的问题:
select zipcode
from
(
select name, zipcode
from yourTable
group by name, zipcode
)
group by zipcode
having count(*) > 1
应该这样做。它在性能方面可能不是最佳的,在这种情况下,您可以使用@ a1ex07
建议的窗口函数答案 1 :(得分:2)
如果您只需要zipcode,请使用 vc 74 的解决方案。对于所有列,基于窗口函数的解决方案应该优于自联接方法:
SELECT a.zipcode, a.name
FROM
(
SELECT zipcode, name, count(1) over(partition by zipcode) as cnt
FROM your_table
)a
WHERE a.cnt >1
答案 2 :(得分:1)
试试这个:
select yt.*
from YOUR_TABLE yt
, (select zipcode
from YOUR_TABLE
group by zipcode
having count(*) > 1
) m
where yt.zipcode = m.zipcode