如何找到姓名相同的人

时间:2015-10-20 11:05:25

标签: sql

所以我有一个包含3列的表格: id \ first_name \ last_name 我需要找到有多少人拥有相同的全名。 我有这样的事情:

SELECT COUNT(*) 
FROM ACTOR 
WHERE FIRST_NAME IN (SELECT FIRST_NAME,LAST_NAME 
            FROM ACTOR
            HAVING COUNT(FIRST_NAME,LAST_NAME) >1);

4 个答案:

答案 0 :(得分:2)

使用GROUP BY

SELECT FIRST_NAME, LAST_NAME, Count(*) AS CNT
FROM ACTOR
GROUP BY FIRST_NAME, LAST_NAME
HAVING COUNT(*) > 1

这将返回第一个和最后一个名称以及它们出现在具有重复项的所有内容中的频率。如果您只想知道可以使用的数量:

在SQL-Server中:

SELECT TOP 1 COUNT(*) OVER () AS RecordCount -- TOP 1 because the total-count is repeated for every row
FROM ACTOR
GROUP BY FIRST_NAME, LAST_NAME
HAVING COUNT(*) > 1

所有其他人:

Select COUNT(*) AS RecordCount
From    
(
    SELECT FIRST_NAME, LAST_NAME
    FROM ACTOR
    GROUP BY FIRST_NAME, LAST_NAME
    HAVING COUNT(*) > 1
) As X

答案 1 :(得分:0)

修复方法有几种可能性。我认为最好的学习方法是EXISTS

SELECT COUNT(*) 
FROM ACTOR a
WHERE EXISTS (SELECT 1
              FROM ACTOR a2
              WHERE a2.FIRST_NAME = a.FIRST_NAME AND a2.LAST_NAME = a.LAST_NAME AND
                    a2.id <> a.id
             );

答案 2 :(得分:0)

使用连接和分组

select id,FIRST_NAME,LAST_NAME,count(*)
from 
(
select id,FIRST_NAME,LAST_NAME,FIRST_NAME||LAST_NAME as full_name
from
actor)x
group by id,FIRST_NAME,LAST_NAME
having count(*) > 1;

答案 3 :(得分:0)

试试这个:

SELECT COUNT(*) as Totals, NAME
FROM 
(SELECT FIRST_NAME+LAST_NAME  AS NAME
            FROM ACTOR)A 
            GROUP BY NAME