从SQL查询中获取每个重复记录的计数

时间:2016-07-14 09:05:58

标签: java sql spring

我有四列,2列可以说表PersonalInfo中的FIRST_NAME和LAST_NAME以及表AddressDetails中的其他2列ADD1和ADD2。现在我要做的是我想知道考虑所有4列的每行重复记录的计数。我怎么能这样做?

到目前为止,我有两种方法: 1.我迭代每个响应并与剩余的响应进行比较。 2.做一些查询。

我知道第一种情况是最糟糕的选择,因为它需要花费很多时间。我可以用查询做些什么吗?

我搜索并发现了这个:

SELECT LAST_NAME, count(LAST_NAME) FROM SchemaName.PersonalInfo S GROUP by LAST_NAME;

,基本适用于单列,而不适用于多列。

我该怎么办?请建议。

2 个答案:

答案 0 :(得分:0)

按所有cols分组,而不仅仅是姓氏。

工作小提琴:http://sqlfiddle.com/#!9/a76e7e/3

SELECT P.fname,P.lname,A.add1,A.add2, count(*) 
FROM PersonalInfo P, AddressDetails A 
Where P.id = A.id
GROUP by P.fname,P.lname,A.add1,A.add2
having count(*) > 1;

如上例所示,在id上加入表格。

答案 1 :(得分:0)

我认为你的桌面PersonalInfo有一个主键,而AddressDetails是这个主键上的一个forey键吗?

select t1.FIRST_NAME , t1.LAST_NAME, t2.ADD1 , t2.ADD2, count(*)      NbPossibility 
from PersonalInfo  t1 inner join AddressDetails t2
on t1.idPersonalInfo=t2.idPersonalInfo
group by t1.FIRST_NAME , t1.LAST_NAME, t2.ADD1 , t2.ADD2 
having count(*)>1

你没有加入这张桌子的钥匙(正常):

select t1.FIRST_NAME , t1.LAST_NAME, t2.ADD1 , t2.ADD2, count(*)      NbPossibility 
from PersonalInfo  t1 cross join AddressDetails t2
group by t1.FIRST_NAME , t1.LAST_NAME, t2.ADD1 , t2.ADD2 
having count(*)>1