programing

열 값이 고유하지 않은 모든 행을 선택하는 방법

yoursource 2023. 4. 7. 22:37
반응형

열 값이 고유하지 않은 모든 행을 선택하는 방법

열 값이 고유하지 않은 모든 행(예: EmailAddress)을 반환하는 select 문을 실행해야 합니다.

예를 들어, 테이블이 다음과 같은 경우:

CustomerName     EmailAddress
Aaron            aaron@gmail.com
Christy          aaron@gmail.com
Jason            jason@gmail.com
Eric             eric@gmail.com
John             aaron@gmail.com

반환할 쿼리가 필요합니다.

Aaron            aaron@gmail.com
Christy          aaron@gmail.com
John             aaron@gmail.com

저는 많은 글을 읽고 여러 가지 질문을 해봤지만 소용이 없었습니다.제가 필요하다고 생각하는 질문은 아래와 같습니다.다른 대안을 제시하거나 제 질문에 어떤 문제가 있는지 말씀해 주실 수 있나요?

select EmailAddress, CustomerName from Customers
group by EmailAddress, CustomerName
having COUNT(distinct(EmailAddress)) > 1

이것은, 이 네트워크보다 큰폭으로 고속입니다.EXISTS방법:

SELECT [EmailAddress], [CustomerName] FROM [Customers] WHERE [EmailAddress] IN
  (SELECT [EmailAddress] FROM [Customers] GROUP BY [EmailAddress] HAVING COUNT(*) > 1)

쿼리에서 잘못된 점은 이메일과 이름으로 그룹화하고 있다는 것입니다.이 그룹은 이메일과 이름이 조합된 각각의 고유한 이메일 집합과 이름 집합을 형성되어 있습니다.

aaron and aaron@gmail.com
christy and aaron@gmail.com
john and aaron@gmail.com

3개의 다른 그룹으로 취급되며, 모두 1개의 단일 그룹에 속합니다.

아래 표시된 대로 쿼리를 사용하십시오.

select emailaddress,customername from customers where emailaddress in
(select emailaddress from customers group by emailaddress having count(*) > 1)
select CustomerName,count(1) from Customers group by CustomerName having count(1) > 1

어때.

SELECT EmailAddress, CustomerName FROM Customers a
WHERE Exists ( SELECT emailAddress FROM customers c WHERE a.customerName != c.customerName AND a.EmailAddress = c.EmailAddress)

재미삼아 또 다른 방법이 있습니다.

;with counts as (
    select CustomerName, EmailAddress,
      count(*) over (partition by EmailAddress) as num
    from Customers
)
select CustomerName, EmailAddress
from counts
where num > 1

레코드가 큰 경우 쿼리 시간이 길어지는 서브 쿼리를 사용하는 것이 아닙니다.

이 문제에 대한 더 나은 옵션으로 이너 조인을 사용할 것을 제안합니다.

같은 표를 고려했을 때 결과를 얻을 수 있다.

SELECT EmailAddress, CustomerName FROM Customers as a 
Inner Join Customers as b on a.CustomerName <> b.CustomerName and a.EmailAddress = b.EmailAddress

더 나은 결과를 얻으려면CustomerID또는 테이블의 고유한 필드입니다.의 복제CustomerName가능합니다.

SELECT        Title, Id
FROM            dbo.TblNews
WHERE        (Title IN
      (SELECT  Title 
FROM dbo.TblNews AS TblNews_1
GROUP BY Title
HAVING (COUNT(*) > 1)))
ORDER BY Title
  • 제목으로 정렬하다

언급URL : https://stackoverflow.com/questions/13146304/how-to-select-every-row-where-column-value-is-not-distinct

반응형