Find and remove duplicates: Difference between revisions

From LemonWiki共筆
Jump to navigation Jump to search
 
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Find and remove duplicates in Excel ==
== Find and remove duplicates in Excel ==
=== Find duplicates in Excel ===
=== Find duplicates in Excel ===
Finding duplicate rows that differ in one column
==== Finding Duplicate Rows That Differ in One Column ====
* one column data: [http://www.extendoffice.com/documents/excel/1499-count-duplicate-values-in-column.html How to count duplicate values in a column in Excel?] Using {{kbd | key = COUNTIF(range, criteria)}} {{access | date = 2015-08-25}} or using '''Pivot Tables'''(樞紐分析表)  to find the occurrence of value >= 2
Example function
<pre>
=IF(AND(LEN(A2)>0, COUNTIF(A:A, A2)>=2), 1, 0)
</pre>
 
This function works by checking each cell in a specified column (in this case, column A). Here's a breakdown of how it operates:


Finding duplicate rows that differ in multiple columns
* LEN(A2)>0: This part of the formula checks if the cell is not empty. It prevents empty cells from being flagged as duplicates.
* COUNTIF(A:A, A2)>=2: This checks how many times the value in cell A2 appears in column A. If it appears two or more times, it meets the criteria for being considered a duplicate.
* IF(AND(...), 1, 0): The IF function combined with AND evaluates the conditions mentioned above. If both conditions are true (meaning the cell is not empty and the value appears two or more times), the function returns 1, indicating a duplicate. If not, it returns 0.
 
References
* [http://www.extendoffice.com/documents/excel/1499-count-duplicate-values-in-column.html How to count duplicate values in a column in Excel?] Using {{kbd | key = COUNTIF(range, criteria)}} {{access | date = 2015-08-25}} or using '''Pivot Tables'''(樞紐分析表)  to find the occurrence of value >= 2
 
==== Marking Duplicate Titles with Sequential Numbers ====
 
'''Practical Example:'''
{| class="wikitable"
|-
! Row !! Title !! Formula (Sequential) !! Formula Result (Sequential) !! Formula (Flag Only) !! Formula Result (Flag Only)
|-
| A2 || Duplicate Title || =COUNTIF($A$2:A2, A2)-1 || 0 || =IF(COUNTIF($A$2:A2, A2)>1, 1, "") || (blank)
|-
| A3 || Other Title || =COUNTIF($A$2:A3, A3)-1 || 0 || =IF(COUNTIF($A$2:A3, A3)>1, 1, "") || (blank)
|-
| A4 || Duplicate Title || =COUNTIF($A$2:A4, A4)-1 || 1 || =IF(COUNTIF($A$2:A4, A4)>1, 1, "") || 1
|-
| A5 || Duplicate Title || =COUNTIF($A$2:A5, A5)-1 || 2 || =IF(COUNTIF($A$2:A5, A5)>1, 1, "") || 1
|}
 
 
Example function for marking duplicate occurrence order
<pre>
=COUNTIF($A$2:A2, A2)-1
</pre>
 
This function marks duplicate entries with sequential numbers (0 for first occurrence, 1 for second, 2 for third, etc.). Here's a breakdown of how it operates:
 
* $A$2:A2: This is an expanding range with mixed cell references. The starting point ($A$2) is fixed with absolute reference, while the ending point (A2) uses relative reference that changes as the formula is copied down.
* COUNTIF($A$2:A2, A2): This counts how many times the value in the current row appears from the start of the range up to and including the current row. For the first occurrence, the range is just one cell (A2:A2) so it returns 1. For the second occurrence, the range expands (A2:B3) and returns 2.
* -1: Subtracting 1 converts the count to a zero-based index. First occurrence = 1-1 = 0, second occurrence = 2-1 = 1, third occurrence = 3-1 = 2.
 
'''Marking Only Duplicate Entries'''
 
Example function for flagging duplicates only
<pre>
=IF(COUNTIF($A$2:A2, A2)>1, 1, "")
</pre>
 
This function only marks duplicate entries (second occurrence onwards) with 1, leaving first occurrences blank. Here's how it works:
 
* COUNTIF($A$2:A2, A2)>1: This checks if the current value has appeared more than once in the expanding range from the start up to the current row.
* IF(..., 1, ""): If the condition is true (meaning this is a duplicate), the function returns 1. Otherwise, it returns an empty string (""), leaving the cell blank.
* Result: First occurrence shows nothing, second and subsequent occurrences show 1.
 
==== Finding duplicate rows that differ in multiple columns ====
* two or multiple columns data: (approach 1) [https://support.microsoft.com/en-us/kb/213367 How to compare data in two columns to find duplicates in Excel] {{access | date = 2015-06-16}} {{exclaim}} It may costs too much time (larger than one hour) if the number of records exceeds 1,000,000 (approach 2) Using [https://support.office.com/en-us/article/concat-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2 CONCAT function] to concatenate two or multiple columns data. And then use {{kbd | key = COUNTIF(range, criteria)}}.
* two or multiple columns data: (approach 1) [https://support.microsoft.com/en-us/kb/213367 How to compare data in two columns to find duplicates in Excel] {{access | date = 2015-06-16}} {{exclaim}} It may costs too much time (larger than one hour) if the number of records exceeds 1,000,000 (approach 2) Using [https://support.office.com/en-us/article/concat-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2 CONCAT function] to concatenate two or multiple columns data. And then use {{kbd | key = COUNTIF(range, criteria)}}.


Counging
* [http://superuser.com/questions/307837/how-to-count-number-of-repeat-occurrences microsoft excel - How to count number of repeat occurrences - Super User] {{exclaim}} long number issue: [https://superuser.com/questions/783840/countif-incorrectly-matches-long-number microsoft excel - Countif incorrectly matches long number - Super User]
* [http://superuser.com/questions/307837/how-to-count-number-of-repeat-occurrences microsoft excel - How to count number of repeat occurrences - Super User] {{exclaim}} long number issue: [https://superuser.com/questions/783840/countif-incorrectly-matches-long-number microsoft excel - Countif incorrectly matches long number - Super User]
==== Checking for Duplicate Values in a Specified Range ====
Example function
<pre>
=SUMPRODUCT(COUNTIF(E2:N2, E2:N2)) > COUNTA(E2:N2)
</pre>
This function checks whether there are duplicate values within the range E2 to N2. Here's a breakdown of how it operates:
* COUNTIF(E2:N2, E2:N2): This part counts how many times each value appears in the range. For each cell, it calculates the occurrence count of that value within the entire range.
* SUMPRODUCT(...): Sums all the count results. If there are no duplicates, the sum will equal the number of cells; if duplicates exist, the sum will be greater than the number of cells.
* COUNTA(E2:N2): Counts the number of non-empty cells in the range.
* ... > COUNTA(E2:N2): Compares the sum with the cell count. If the sum is greater, it indicates duplicates exist and the function returns TRUE; otherwise, it returns FALSE.
Alternative methods
* '''Count duplicate occurrences''': Using {{kbd | key = SUMPRODUCT(COUNTIF(E2:N2, E2:N2) - 1)}} to calculate the number of duplicate items
* '''Using UNIQUE function''': Using {{kbd | key = COUNTA(E2:N2) <> COUNTA(UNIQUE(E2:N2))}} as a simplified version (Google Sheets only)
References
* [https://support.google.com/docs/answer/3093991 Google Sheets COUNTIF function]
* [https://support.google.com/docs/answer/3238496?hl=en&sjid=3385137518767327741-NC SUMIFS function - Google Docs Editors Help]
* [https://support.google.com/docs/answer/10522653?hl=en&sjid=3385137518767327741-NC UNIQUE function - Google Docs Editors Help]


=== Remove duplicates in Excel ===
=== Remove duplicates in Excel ===
* EXCEL: Data Tools -> Remove Duplicates: [https://support.office.com/en-us/article/Filter-for-unique-values-or-remove-duplicate-values-d6549cf0-357a-4acf-9df5-ca507915b704 Filter for unique values or remove duplicate values] {{access | date = 2015-10-20}}
* EXCEL: Data Tools -> Remove Duplicates: [https://support.office.com/en-us/article/Filter-for-unique-values-or-remove-duplicate-values-d6549cf0-357a-4acf-9df5-ca507915b704 Filter for unique values or remove duplicate values] {{access | date = 2015-10-20}}


== Find and remove duplicates in Cygwin/BASH ==
== Find and remove duplicates in Cygwin/BASH ==
Line 24: Line 98:


Data preparation:
Data preparation:
* [[Alternative_Linux_commands#Merge_multiple_plain_text_files | Merge multiple plain text files]]
* [[Linux commands#Merge_multiple_plain_text_files | Merge multiple plain text files]]


case 1: To remove duplicate lines of entire paragraph
case 1: To remove duplicate lines of entire paragraph
Line 36: Line 110:
== Find and remove duplicates in MySQL ==
== Find and remove duplicates in MySQL ==
=== Find duplicates in MySQL ===
=== Find duplicates in MySQL ===
Finding duplicate value that differ in one column<ref>[http://stackoverflow.com/questions/688549/finding-duplicate-values-in-mysql?rq=1 Finding duplicate values in MySQL - Stack Overflow]</ref>
==== Finding duplicate value that differ in one column ====
'''Finding duplicate value that differ in one column'''<ref>[http://stackoverflow.com/questions/688549/finding-duplicate-values-in-mysql?rq=1 Finding duplicate values in MySQL - Stack Overflow]</ref>
<pre>
<pre>
-- Generate test data.
-- Generate test data.
Line 65: Line 140:
</pre>
</pre>


'''Another approach:''' Add {{kbd | key=content_hash}} column which its value is {{kbd | key=MD5(content_column)}}<ref>[https://errerrors.blogspot.com/2023/08/how-to-find-duplicate-text-values-in-mysql.html MySQL 如何尋找重複的文章 (文字類型資料)]</ref>
<pre>
-- To find the duplicated records with same content
SELECT count(*) as count, content_hash
FROM `YOUR_TABLE_NAME`
GROUP BY content_hash
HAVING count >= 2
</pre>
==== Finding duplicate rows that differ in multiple columns ====
Finding duplicate rows that differ in multiple columns: Using {{kbd | key =CONCAT}} for multiple columns ex: column_1, column_2  
Finding duplicate rows that differ in multiple columns: Using {{kbd | key =CONCAT}} for multiple columns ex: column_1, column_2  
<pre>
<pre>
Line 84: Line 170:
</pre>
</pre>


Select deduplicated records
==== Select deduplicated/duplicated records ====
* [http://www.mysqltutorial.org/mysql-distinct.aspx MySQL DISTINCT - Eliminate Duplicate Rows in a Result Set]. Using {{kbd | key =GROUP_CONCAT}} to handle the multiple columns<ref>[http://stackoverflow.com/questions/12188027/mysql-select-distinct-multiple-columns sql - MySQL SELECT DISTINCT multiple columns - Stack Overflow]</ref>
* [http://www.mysqltutorial.org/mysql-distinct.aspx MySQL DISTINCT - Eliminate Duplicate Rows in a Result Set]. Using {{kbd | key =GROUP_CONCAT}} to handle the multiple columns<ref>[http://stackoverflow.com/questions/12188027/mysql-select-distinct-multiple-columns sql - MySQL SELECT DISTINCT multiple columns - Stack Overflow]</ref>
* [http://www.w3schools.com/sql/sql_unique.asp SQL UNIQUE Constraint] "Note that you can have many UNIQUE constraints per table, but only one PRIMARY KEY constraint per table." Quoted from w3schools webpage.
* [http://www.w3schools.com/sql/sql_unique.asp SQL UNIQUE Constraint] "Note that you can have many UNIQUE constraints per table, but only one PRIMARY KEY constraint per table." Quoted from w3schools webpage.
Line 101: Line 187:
MySQL: find the number of duplicate occurrence between list_a & list_b which using the same primary key: column name {{kbd | key = id}}
MySQL: find the number of duplicate occurrence between list_a & list_b which using the same primary key: column name {{kbd | key = id}}
* {{kbd | key = SELECT count(DISTINCT(`id`)) FROM `list_a` WHERE `id` IN (SELECT DISTINCT(`id`) FROM `list_b`) ; }}
* {{kbd | key = SELECT count(DISTINCT(`id`)) FROM `list_a` WHERE `id` IN (SELECT DISTINCT(`id`) FROM `list_b`) ; }}


=== Remove duplicates in MySQL ===
=== Remove duplicates in MySQL ===
Line 114: Line 199:
** Menu: Data -> Remove duplicates
** Menu: Data -> Remove duplicates
* Google spreadsheet add-on: [https://www.ablebits.com/google-sheets-add-ons/remove-duplicates/howto.php Remove Duplicates for Google Sheets help]
* Google spreadsheet add-on: [https://www.ablebits.com/google-sheets-add-ons/remove-duplicates/howto.php Remove Duplicates for Google Sheets help]
* [https://sheetaki.com/remove-duplicates-from-comma-delimited-strings-in-google-sheets/ Remove Duplicates from Comma-Delimited Strings in Google Sheets - Sheetaki]
Initial contents of cell A2 which its separator is comma or whitespace. The second parameter of SPLIT function is {{kbd | key=<nowiki>", "</nowiki>}} (a comma followed by a space):
<pre>
apple, banana, apple
</pre>
To remove duplicates from Cell A2, use the following formula: ((learn more about the UNIQUE function from Google Help<ref>[https://support.google.com/docs/answer/10522653?hl=zh-Hant UNIQUE 函式 - Google 文件編輯器說明]</ref> or Microsoft support<ref>[https://support.microsoft.com/zh-tw/office/unique-%E5%87%BD%E6%95%B8-c5ab87fd-30a3-4ce9-9d1a-40204fb85e1e UNIQUE 函數 - Microsoft 支援服務]</ref>)
<pre>
If cell A2's content is separated by a comma or whitespace:
= JOIN(", ",UNIQUE(TRANSPOSE(SPLIT(A2,", "))))
If cell A2's content is separated solely by a comma:
= JOIN(", ", UNIQUE(TRANSPOSE(ARRAYFORMULA(TRIM(SPLIT(A2, ","))))))
</pre>
Alternatively, activate the `by_column=true` parameter in the second argument of the UNIQUE function:
<pre>
= JOIN(", ",UNIQUE(SPLIT(A2,", "), 1)))
</pre>
Cell A2's contents after removing duplicates:
<pre>
apple, banana
</pre>


== Find and remove duplicates in PHP ==
== Find and remove duplicates in PHP ==
Line 130: Line 240:
== Other issues ==
== Other issues ==
* symbol e.g. data-mining or data_mining
* symbol e.g. data-mining or data_mining
== Related articles ==
* [https://ithelp.ithome.com.tw/questions/10210232 【PYTHON】請問如何避免內容重複抓取 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天]


== References ==
== References ==
<references/>
<references/>


[[Category:Spreadsheet]] [[Category:Excel]]
 
[[Category:Data_hygiene]]
{{Template:Data factory flow}}
[[Category:Data Science]]
 
[[Category:MySQL]]
[[Category: Spreadsheet]]  
[[Category:String manipulation]]
[[Category: Excel]]
[[Category: Data_hygiene]]
[[Category: Data Science]]
[[Category: MySQL]]
[[Category: String manipulation]]
[[Category: Revised with LLMs]]

Latest revision as of 14:32, 6 January 2026

Find and remove duplicates in Excel[edit]

Find duplicates in Excel[edit]

Finding Duplicate Rows That Differ in One Column[edit]

Example function

=IF(AND(LEN(A2)>0, COUNTIF(A:A, A2)>=2), 1, 0)

This function works by checking each cell in a specified column (in this case, column A). Here's a breakdown of how it operates:

  • LEN(A2)>0: This part of the formula checks if the cell is not empty. It prevents empty cells from being flagged as duplicates.
  • COUNTIF(A:A, A2)>=2: This checks how many times the value in cell A2 appears in column A. If it appears two or more times, it meets the criteria for being considered a duplicate.
  • IF(AND(...), 1, 0): The IF function combined with AND evaluates the conditions mentioned above. If both conditions are true (meaning the cell is not empty and the value appears two or more times), the function returns 1, indicating a duplicate. If not, it returns 0.

References

Marking Duplicate Titles with Sequential Numbers[edit]

Practical Example:

Row Title Formula (Sequential) Formula Result (Sequential) Formula (Flag Only) Formula Result (Flag Only)
A2 Duplicate Title =COUNTIF($A$2:A2, A2)-1 0 =IF(COUNTIF($A$2:A2, A2)>1, 1, "") (blank)
A3 Other Title =COUNTIF($A$2:A3, A3)-1 0 =IF(COUNTIF($A$2:A3, A3)>1, 1, "") (blank)
A4 Duplicate Title =COUNTIF($A$2:A4, A4)-1 1 =IF(COUNTIF($A$2:A4, A4)>1, 1, "") 1
A5 Duplicate Title =COUNTIF($A$2:A5, A5)-1 2 =IF(COUNTIF($A$2:A5, A5)>1, 1, "") 1


Example function for marking duplicate occurrence order

=COUNTIF($A$2:A2, A2)-1

This function marks duplicate entries with sequential numbers (0 for first occurrence, 1 for second, 2 for third, etc.). Here's a breakdown of how it operates:

  • $A$2:A2: This is an expanding range with mixed cell references. The starting point ($A$2) is fixed with absolute reference, while the ending point (A2) uses relative reference that changes as the formula is copied down.
  • COUNTIF($A$2:A2, A2): This counts how many times the value in the current row appears from the start of the range up to and including the current row. For the first occurrence, the range is just one cell (A2:A2) so it returns 1. For the second occurrence, the range expands (A2:B3) and returns 2.
  • -1: Subtracting 1 converts the count to a zero-based index. First occurrence = 1-1 = 0, second occurrence = 2-1 = 1, third occurrence = 3-1 = 2.

Marking Only Duplicate Entries

Example function for flagging duplicates only

=IF(COUNTIF($A$2:A2, A2)>1, 1, "")

This function only marks duplicate entries (second occurrence onwards) with 1, leaving first occurrences blank. Here's how it works:

  • COUNTIF($A$2:A2, A2)>1: This checks if the current value has appeared more than once in the expanding range from the start up to the current row.
  • IF(..., 1, ""): If the condition is true (meaning this is a duplicate), the function returns 1. Otherwise, it returns an empty string (""), leaving the cell blank.
  • Result: First occurrence shows nothing, second and subsequent occurrences show 1.

Finding duplicate rows that differ in multiple columns[edit]


Checking for Duplicate Values in a Specified Range[edit]

Example function

=SUMPRODUCT(COUNTIF(E2:N2, E2:N2)) > COUNTA(E2:N2)

This function checks whether there are duplicate values within the range E2 to N2. Here's a breakdown of how it operates:

  • COUNTIF(E2:N2, E2:N2): This part counts how many times each value appears in the range. For each cell, it calculates the occurrence count of that value within the entire range.
  • SUMPRODUCT(...): Sums all the count results. If there are no duplicates, the sum will equal the number of cells; if duplicates exist, the sum will be greater than the number of cells.
  • COUNTA(E2:N2): Counts the number of non-empty cells in the range.
  • ... > COUNTA(E2:N2): Compares the sum with the cell count. If the sum is greater, it indicates duplicates exist and the function returns TRUE; otherwise, it returns FALSE.

Alternative methods

  • Count duplicate occurrences: Using SUMPRODUCT(COUNTIF(E2:N2, E2:N2) - 1) to calculate the number of duplicate items
  • Using UNIQUE function: Using COUNTA(E2:N2) <> COUNTA(UNIQUE(E2:N2)) as a simplified version (Google Sheets only)

References

Remove duplicates in Excel[edit]

Find and remove duplicates in Cygwin/BASH[edit]

Finding duplicate values in Cygwin/BASH[edit]

  • uniq command on Cygwin of Win Os windows.png or Linux Os linux.png : uniq -d <file.txt> > <duplicated_items.txt>[1]


Remove duplicate values in Cygwin/BASH[edit]

GNU Coreutils: sort invocation OS: Linux Os linux.png , cygwin of Win Os windows.png .

Data preparation:

case 1: To remove duplicate lines of entire paragraph

  • sort -us -o <output_unique.file> <input.file> in a large text file (GB)[2]
  • cat <input.file> | grep <pattern> | sort | uniq Processes text line by line and prints the unique lines which match a specified pattern. Equal to these steps: (1) cat <input.file> | grep <pattern> > <tmp.file> (2) sort <tmp.file> | uniq

Case 2: Ignore first n line(s) & remove duplicate lines[3][4][5]

  • (1) ignore first one line: (head -n 1 <file> && tail -n +2 <file> | sort -us) > newfile
  • (2) ignore first two lines: (head -n 2 <file> && tail -n +3 <file> | sort -us) > newfile

Find and remove duplicates in MySQL[edit]

Find duplicates in MySQL[edit]

Finding duplicate value that differ in one column[edit]

Finding duplicate value that differ in one column[6]

-- Generate test data.
CREATE TABLE `table_name` (
  `id` int(11) NOT NULL,
  `content` varchar(5) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `table_name` (`id`, `content`) VALUES
(1, 'apple'),
(2, 'lemon'),
(3, 'apple');

ALTER TABLE `table_name`
  ADD PRIMARY KEY (`id`);

-- Find duplicated data
SELECT `content`, COUNT(*) count 
FROM `table_name` 
GROUP BY `content` 
HAVING count > 1;

SELECT tmp.* FROM 
( 
  SELECT `content`, count(*) count FROM `table_name` GROUP BY `content` 
) tmp 
WHERE tmp.count >1;

Another approach: Add content_hash column which its value is MD5(content_column)[7]

-- To find the duplicated records with same content
SELECT count(*) as count, content_hash
FROM `YOUR_TABLE_NAME`
GROUP BY content_hash
HAVING count >= 2

Finding duplicate rows that differ in multiple columns[edit]

Finding duplicate rows that differ in multiple columns: Using CONCAT for multiple columns ex: column_1, column_2

SELECT count(*) count, CONCAT(  `column_1`, `column_2`  ) 'key'
	FROM `table_name`
	GROUP BY CONCAT(  `column_1`, `column_2`  )
HAVING count > 1;

or

SELECT tmp.key FROM
(
	SELECT count(*) count, CONCAT(  `column_1`, `column_2`  ) 'key'
	FROM `table_name`
	GROUP BY CONCAT(  `column_1`, `column_2`  )
) tmp
WHERE tmp.count >=2

Select deduplicated/duplicated records[edit]


For counting purpose: find the count of repeated id (type: int) between table_a and table_b

SELECT count(DISTINCT(id)) FROM table_a WHERE id IN
(
   SELECT DISTINCT(id) FROM table_b
)

Counting number of duplicate occurrence MySQL: find the number of duplicate occurrence between list_a & list_b which using the same primary key: column name id

  • SELECT count(DISTINCT(`id`)) FROM `list_a` WHERE `id` IN (SELECT DISTINCT(`id`) FROM `list_b`) ;

Remove duplicates in MySQL[edit]


Find and remove duplicates in Google Spreadsheet[edit]

Initial contents of cell A2 which its separator is comma or whitespace. The second parameter of SPLIT function is ", " (a comma followed by a space):

apple, banana, apple

To remove duplicates from Cell A2, use the following formula: ((learn more about the UNIQUE function from Google Help[9] or Microsoft support[10])

If cell A2's content is separated by a comma or whitespace:
= JOIN(", ",UNIQUE(TRANSPOSE(SPLIT(A2,", "))))

If cell A2's content is separated solely by a comma:
= JOIN(", ", UNIQUE(TRANSPOSE(ARRAYFORMULA(TRIM(SPLIT(A2, ","))))))

Alternatively, activate the `by_column=true` parameter in the second argument of the UNIQUE function:

= JOIN(", ",UNIQUE(SPLIT(A2,", "), 1)))

Cell A2's contents after removing duplicates:

apple, banana

Find and remove duplicates in PHP[edit]

Find duplicates in PHP[edit]

Remove duplicates in PHP[edit]

Find and remove duplicates in JavaScript[edit]

Remove duplicates in JavaScript[edit]


Other issues[edit]

  • symbol e.g. data-mining or data_mining

Related articles[edit]

References[edit]


Data factory flow