- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
MySQL MySQL에서 중복 값 찾기
2018.06.15 15:18
MySQL에서 중복 값 찾기
SELECT varchar_col
FROM table
GROUP BY varchar_col
HAVING count(*) > 1;
varchar 열이있는 테이블이 있고이 열에 값이 중복 된 레코드를 모두 찾고 싶습니다. 복제본을 찾는 데 사용할 수있는 최상의 쿼리는 무엇입니까?
중복 행의 ID를 얻기위한 levik의 응답을 토대로 서버가 지원할 경우 GROUP_CONCAT 수행 할 수 있습니다 (쉼표로 구분 된 ID 목록이 반환 됨).
SELECT GROUP_CONCAT(id), name, COUNT(*) c FROM documents GROUP BY name HAVING c > 1;
@ maxyfc의 대답을 더 자세히 살펴보면 , 중복 값으로 반환 된 모든 행을 찾아야 만 MySQL Workbench 에서 편집 할 수 있습니다.
SELECT * FROM table
WHERE field IN (
SELECT field FROM table GROUP BY field HAVING count(*) > 1
) ORDER BY field
나는 어떤 복제본에도 많은 용도가있는 JOIN aproaches를 보지 않을 것입니다.
이 aproeach 실제로 두 배로 결과를 제공합니다.
SELECT t1.* FROM table as t1 LEFT JOIN table as t2 ON t1.name=t2.name and t1.id!=t2.id WHERE t2.id IS NOT NULL ORDER BY t1.name
CREATE TABLE tbl_master
(`id` int, `email` varchar(15));
INSERT INTO tbl_master
(`id`, `email`) VALUES
(1, 'test1@gmail.com'),
(2, 'test2@gmail.com'),
(3, 'test1@gmail.com'),
(4, 'test2@gmail.com'),
(5, 'test5@gmail.com');
QUERY : SELECT id, email FROM tbl_master
WHERE email IN (SELECT email FROM tbl_master GROUP BY email HAVING COUNT(id) > 1)
다음은 두 번 이상 사용 된 모든 product_id를 찾습니다. 각 product_id에 대해 하나의 레코드 만 얻을 수 있습니다.
SELECT product_id FROM oc_product_reward GROUP BY product_id HAVING count( product_id ) >1
코드 가져 오기 : http://chandreshrana.blogspot.in/2014/12/find-duplicate-records-based-on-any.html
위의 결과를 보았고 중복 된 단일 열 값을 검사해야하는 경우 쿼리가 제대로 작동합니다. 예를 들어 이메일.
그러나 더 많은 열을 확인하고 결과 조합을 확인하여이 쿼리가 올바르게 작동하는지 확인하려면 다음을 수행하십시오.
SELECT COUNT(CONCAT(name,email)) AS tot,
name,
email
FROM users
GROUP BY CONCAT(name,email)
HAVING tot>1 (This query will SHOW the USER list which ARE greater THAN 1
AND also COUNT)
하나의 매우 늦은 공헌 ... 누군가가 줄을 서서 기다리는 데 도움이되는 경우 ... 은행 애플 리케이션에서 일치하는 쌍의 거래 (실제로 계좌 간 송금의 양측)를 찾고, 각 계좌 간 이체 거래의 '시작'과 '끝'이었기 때문에 다음과 같이 끝 냈습니다.
SELECT
LEAST(primaryid, secondaryid) AS transactionid1,
GREATEST(primaryid, secondaryid) AS transactionid2
FROM (
SELECT table1.transactionid AS primaryid,
table2.transactionid AS secondaryid
FROM financial_transactions table1
INNER JOIN financial_transactions table2
ON table1.accountid = table2.accountid
AND table1.transactionid <> table2.transactionid
AND table1.transactiondate = table2.transactiondate
AND table1.sourceref = table2.destinationref
AND table1.amount = (0 - table2.amount)
) AS DuplicateResultsTable
GROUP BY transactionid1
ORDER BY transactionid1;
결과적으로 DuplicateResultsTable 은 일치하는 (즉 중복 된) 트랜잭션을 포함하는 행을 제공하지만 두 번째 동일한 쌍과 일치하는 동일한 트랜잭션 ID를 역순으로 제공하므로 첫 번째 트랜잭션 ID로 그룹화 할 외부 SELECT 가 있습니다. LEAST 와 GREATEST 를 사용하여 두 개의 트랜잭션 LEAST 가 항상 같은 순서로 정렬되도록합니다. 그러면 첫 번째 트랜잭션에 의해 GROUP 에 대해 안전하게되므로 모든 중복 된 일치를 제거합니다. 약 2 백만 초에 약 백만 건의 레코드를 검색하고 12,000 개 이상의 일치 항목을 식별했습니다. 물론 transactionid가 중요한 인덱스이며, 이는 실제로 도움이되었습니다.
SELECT *
FROM `dps`
WHERE pid IN (SELECT pid FROM `dps` GROUP BY pid HAVING COUNT(pid)>1)
SELECT
t.*,
(SELECT COUNT(*) FROM city AS tt WHERE tt.name=t.name) AS count
FROM `city` AS t
WHERE
(SELECT count(*) FROM city AS tt WHERE tt.name=t.name) > 1 ORDER BY count DESC
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 87189 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 79405 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 96121 |
| 2 |
[빅데이터분석기사 실기] 빅데이터분석기사 3회 실기 문제 복원 (기출) + 시험공부 팁
| 졸리운_곰 | 2022.02.07 | 2017 |
| 1 |
[빅데이터분석기사] 실기 : 시험 후기, [자격증] 빅데이터분석기사 실기 합격 후기 (비전공자 문과)
| 졸리운_곰 | 2022.02.04 | 1790 |

