首页 > 解决方案 > SQL - 查询至少出现两次的名称

问题描述

因此,我试图找到一种方法来查询具有属性“name”的表“people”,并且我想查询至少出现两次的名称,而结果应该是不同的。

我正在考虑创建两个别名表,并加入名称,但我无法弄清楚。

这是我尝试过的:

SELECT DISTINCT name
FROM people AS S1 
INNER JOIN people AS S2 USING name
WHERE S2.lastname <> S2.surname

我所做的姓氏部分是为了删除由于两个表相等而出现的名字的情况(甚至不确定这是否正确)。但无论哪种方式,这已经失败,因为语法错误。

将不胜感激一些帮助!提前致谢。

标签: sqlpostgresql

解决方案


如果您只需要名称,聚合是一种简单的方法:

select name
from persons
group by name
having count(*) > 1;

如果您想要原始行,请使用窗口函数:

select p.*
from (select p.*, count(*) over (partition by name) as cnt
      from persons p
     ) p
where cnt >= 2;

推荐阅读