SELECT name, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
만일 우리가 테이블
<! - 언어: > 랑 없음 -;
ID NAME EMAIL
1 John [email protected]
2 Sam [email protected]
3 Tom [email protected]
4 Bob [email protected]
5 Tom [email protected]
이 질의에서는 존, 샘, 톰 톰 같도다라고 그들은 모두 우리 부여하느뇨 같은 '이메일'.
하지만 제가 원하는 것은 '이메일' 및 '이름' 와 동일한 데이터를 얻을 수 있습니다.
즉, I want to get ";;; Tom" Tom" ".
그 이유는 데릭쉐퍼드와 이: 내가 실수를 저질렀다 '이름' 와 '이메일', 허용된 삽입하려면 복제본임을 값. 지금 내가 할 수 있기 때문에, 중복 제거 / 변경하십시오 데릭쉐퍼드와 groupx 먼저 해당.
SELECT
name, email, COUNT(*)
FROM
users
GROUP BY
name, email
HAVING
COUNT(*) > 1
단순히 두 그룹에서 열.
참고: 하지만 이 모든 것이 이전 ANSI 표준 비사양 집선됨 열의 그룹순 변경되었습니까 생각을 가지고 있는 " dependency", 기능,:
>. 관계형 데이터베이스 이론에서, 둘 사이에 있는 함수 종속 구속조건으로 관계식에서 속성 집합 () 는 데이터베이스에서. 즉, 함수 종속 관계를 설명하는 것은 구속조건으로 속성을 관계.
일관됨 가 지원되지 않습니다.
[2]: https://www.postgresql.org/docs/current/static/sql-select.html # sql 그룹비
이거 드세요.
declare @YourTable table (id int, name varchar(10), email varchar(50))
INSERT @YourTable VALUES (1,'John','John-email')
INSERT @YourTable VALUES (2,'John','John-email')
INSERT @YourTable VALUES (3,'fred','John-email')
INSERT @YourTable VALUES (4,'fred','fred-email')
INSERT @YourTable VALUES (5,'sam','sam-email')
INSERT @YourTable VALUES (6,'sam','sam-email')
SELECT
name,email, COUNT(*) AS CountOf
FROM @YourTable
GROUP BY name,email
HAVING COUNT(*)>1
출력:
name email CountOf
---------- ----------- -----------
John John-email 2
sam sam-email 2
(2 row(s) affected)
스케쳐내 dup id 를 사용합니다.
SELECT
y.id,y.name,y.email
FROM @YourTable y
INNER JOIN (SELECT
name,email, COUNT(*) AS CountOf
FROM @YourTable
GROUP BY name,email
HAVING COUNT(*)>1
) dt ON y.name=dt.name AND y.email=dt.email
출력:
id name email
----------- ---------- ------------
1 John John-email
2 John John-email
5 sam sam-email
6 sam sam-email
(4 row(s) affected)
복제물을 삭제하는 시도하시겠습니까:
DELETE d
FROM @YourTable d
INNER JOIN (SELECT
y.id,y.name,y.email,ROW_NUMBER() OVER(PARTITION BY y.name,y.email ORDER BY y.name,y.email,y.id) AS RowRank
FROM @YourTable y
INNER JOIN (SELECT
name,email, COUNT(*) AS CountOf
FROM @YourTable
GROUP BY name,email
HAVING COUNT(*)>1
) dt ON y.name=dt.name AND y.email=dt.email
) dt2 ON d.id=dt2.id
WHERE dt2.RowRank!=1
SELECT * FROM @YourTable
출력:
id name email
----------- ---------- --------------
1 John John-email
3 fred John-email
4 fred fred-email
5 sam sam-email
(4 row(s) affected)
스케쳐내 here& # 39 의 복제물을 삭제하는 것보다 훨씬 간단해진다는 길일 붙여넣습니다 하위 선택 / 홀수입니다 행뿐만 트리플 찾을 수 있다.
SELECT id, name, email
FROM users u, users u2
WHERE u.name = u2.name AND u.email = u2.email AND u.id > u2.id
그래서 삭제할 수 있습니다.
DELETE FROM users
WHERE id IN (
SELECT id/*, name, email*/
FROM users u, users u2
WHERE u.name = u2.name AND u.email = u2.email AND u.id > u2.id
)
이럴 훨씬 더 읽고 이해하기 쉽게
하지만 저는 조금 늦게 파티였죠 http://support. 정말 준활성 해결하십시오 찾는 모든 중복 id:
SELECT GROUP_CONCAT( id )
FROM users
GROUP BY email
HAVING ( COUNT(email) > 1 )
이 코드를 시도하시겠습니까
WITH CTE AS
( SELECT Id, Name, Age, Comments, RN = ROW_NUMBER()OVER(PARTITION BY Name,Age ORDER BY ccn)
FROM ccnmaster )
select * from CTE
이 모든 선택 / deletes 제외한 각 그룹의 1 복제본임을 레코드전자문서의 기록하십시오 복제본의. 따라서 각 그룹의 모든 고유해야 레코드는유지합니다 + one of the 찻입 삭제하시겠습니까 기록하십시오 중복.
중복 선택합니다.
SELECT *
FROM table
WHERE
id NOT IN (
SELECT MIN(id)
FROM table
GROUP BY column1, column2
);
삭제하시겠습니까 복제:
DELETE FROM table
WHERE
id NOT IN (
SELECT MIN(id)
FROM table
GROUP BY column1, column2
);
이렇게 될 경우 racle, 작동합니까 좋습니다.
create table my_users(id number, name varchar2(100), email varchar2(100));
insert into my_users values (1, 'John', '[email protected]');
insert into my_users values (2, 'Sam', '[email protected]');
insert into my_users values (3, 'Tom', '[email protected]');
insert into my_users values (4, 'Bob', '[email protected]');
insert into my_users values (5, 'Tom', '[email protected]');
commit;
select *
from my_users
where rowid not in (select min(rowid) from my_users group by name, email);
볼 수 있는지, 내가 원하는 경우 사용할 수 있는 테이블 아래에서 복제본임을 행뿐만 쿼리하지:
create table my_table(id int, name varchar(100), email varchar(100));
insert into my_table values (1, 'shekh', '[email protected]');
insert into my_table values (1, 'shekh', '[email protected]');
insert into my_table values (2, 'Aman', '[email protected]');
insert into my_table values (3, 'Tom', '[email protected]');
insert into my_table values (4, 'Raj', '[email protected]');
Select COUNT(1) As Total_Rows from my_table
Select Count(1) As Distinct_Rows from ( Select Distinct * from my_table) abc
이 예에서는 aspt 모든 학생들에게 복제본임을 이름과 도브. 필드를 확인할 복제에서는 다시 들어갈 것이다. 다른 모든 필드용 운영까지도 투영 (projection) 에 포함시킬 수 있습니다.
with cte (StudentId, Fname, LName, DOB, RowCnt)
as (
SELECT StudentId, FirstName, LastName, DateOfBirth as DOB, SUM(1) OVER (Partition By FirstName, LastName, DateOfBirth) as RowCnt
FROM tblStudent
)
SELECT * from CTE where RowCnt > 1
ORDER BY DOB, LName