Bagaimana menemukan dan menghapus baris duplikat di mysql?

Solusi masuk untuk menghapus baris duplikat dari kumpulan hasil Anda adalah dengan memasukkan kata kunci yang berbeda dalam pernyataan pemilihan Anda. Ini memberi tahu mesin kueri untuk menghapus duplikat untuk menghasilkan kumpulan hasil di mana setiap baris unik. Tahukah Anda bahwa klausa grup menurut juga dapat digunakan untuk menghapus duplikat?

Kata Kunci Distinct dan Distinctrow

Kata kunci yang berbeda datang langsung setelah SELECT dalam pernyataan kueri dan menggantikan semua kata kunci opsional, yang merupakan default. Distinctrow adalah alias untuk yang berbeda dan menghasilkan hasil yang sama persis

    SELECT [ALL | DISTINCT | DISTINCTROW ]
    select_expr
    [FROM table_references
    [WHERE where_condition]

Untuk mengilustrasikan cara kerjanya, mari pilih beberapa data dari tabel berikut, yang berisi daftar buah dan warnanya

nama

warna

apel

merah

apel

hijau

apel

kuning

pisang

kuning

pisang

hijau

anggur

merah

anggur

putih

Kueri berikut akan mengambil semua nama buah dari tabel dan mencantumkannya dalam urutan abjad

SELECT name
FROM fruits;
_

Tanpa informasi warna, kami memiliki kelipatan dari setiap jenis buah

nama

apel

apel

apel

pisang

pisang

anggur

anggur

Sekarang mari coba kueri lagi dengan kata kunci yang berbeda

SELECT DISTINCT name
FROM fruits;

Seperti yang diharapkan, kami sekarang hanya memiliki satu contoh dari setiap jenis buah

nama

apel

pisang

anggur

Andai saja selalu semudah itu. Pencarian Internet cepat pada frasa "sql menghilangkan duplikat" menunjukkan bahwa ada lebih banyak untuk menghapus nilai duplikat daripada memasukkan kata kunci yang berbeda ke dalam pernyataan SELECT Anda

Kapan Baris Duplikat Bukan Baris Duplikat

Satu masalah yang tidak dapat dipecahkan oleh kata kunci yang berbeda adalah terkadang menghapus duplikat menciptakan hasil yang menyesatkan. Perhatikan skenario berikut

Klien ingin membuat daftar karyawan mereka untuk menghasilkan beberapa statistik. Inilah beberapa SQL untuk melakukan itu

SELECT name,
       gender,       
       salary
FROM employees
ORDER BY name;

Anehnya, ini menghasilkan baris duplikat untuk "Kristen Ruegg"

Nama

jenis kelamin

gaji

Allan Smithie

m

4900

Barbara Breitenmoser

f

(BATAL)

Jon Simpson

m

4500

Kirsten Ruegg

f

5600

Kristen Ruegg

f

5600

Peter Jonson

m

5200

Ralph Teller

m

5100

Klien menjawab bahwa mereka tidak menginginkan duplikat, jadi pengembang menambahkan kata kunci berbeda yang dapat dipercaya ke pernyataan SELECT. Ini menghasilkan hasil yang diinginkan, kecuali untuk satu detail kecil. Ada dua karyawan dengan nama yang sama. Menambahkan kata kunci yang berbeda membuat hasil yang salah dengan menghapus baris yang valid. Menyertakan nomor_emp_id_unik ke daftar bidang menegaskan bahwa memang ada dua Kristen Rueggs

SELECT name,
       gender,       
       salary,
       emp_id_number
FROM employees
ORDER BY name;
_

Inilah data yang dipermasalahkan yang menunjukkan emp_id_numbers unik

nama

jenis kelamin

gaji

emp_id_number

Kirsten Ruegg

f

5600

3462

Kristen Ruegg

f

5600

2223

Moral dari cerita ini adalah ini. Saat menggunakan kata kunci yang berbeda, pastikan Anda tidak secara tidak sengaja menghapus data yang valid

Membandingkan Distinct dengan Group By

Menggunakan perbedaan secara logis setara dengan menggunakan grup dengan semua kolom yang dipilih tanpa fungsi agregat. Untuk kueri seperti itu, kelompokkan dengan hanya menghasilkan daftar nilai pengelompokan yang berbeda. Saat menampilkan dan mengelompokkan berdasarkan satu kolom, kueri menghasilkan nilai berbeda di kolom tersebut. Namun, jika Anda menampilkan dan mengelompokkan menurut beberapa kolom, kueri akan menghasilkan kombinasi nilai yang berbeda di setiap kolom. Misalnya, kueri berikut menghasilkan kumpulan baris yang sama seperti yang dilakukan SELECT pertama kami

SELECT name 
FROM fruits 
GROUP BY name;

Demikian pula, pernyataan berikut menghasilkan hasil yang sama seperti SELECT yang berbeda pada tabel karyawan

SELECT name,
       gender,       
       salary 
FROM employees
GROUP BY name;
_

Perbedaan antara yang berbeda dan yang dikelompokkan menurut adalah bahwa kelompok menurut menyebabkan pengurutan baris. Karena itu

SELECT name,
       gender,       
       salary 
FROM employees
GROUP BY name;
_

…sama dengan

SELECT DISTINCT name,
                gender,       
                salary 
FROM employees
ORDER BY name;
_

Menghitung Duplikat

Distinct dapat digunakan dengan fungsi COUNT() untuk menghitung berapa banyak nilai berbeda yang terdapat dalam kolom. COUNT(ekspresi berbeda) menghitung jumlah nilai non-NULL yang berbeda (unik) dari ekspresi yang diberikan. Ekspresi dapat berupa nama kolom untuk menghitung jumlah nilai non-NULL yang berbeda dalam kolom

Berikut data tabel karyawan selengkapnya

Indo

dept_id

jenis kelamin

nama

gaji

emp_id_number

1

2

m

Jon Simpson

4500

1234

2

4

f

Barbara Breitenmoser

(BATAL)

9999

3

3

f

Kirsten Ruegg

5600

3462

4

1

m

Ralph Teller

5100

6543

5

2

m

Peter Jonson

5200

9747

6

2

m

Allan Smithie

4900

6853

7

4

f

Kirsten Ruegg

5600

2223

8

3

f

Kirsten Ruegg

4400

2765

Menerapkan fungsi Hitung berbeda pada bidang nama menghasilkan enam nama unik

SELECT Count(DISTINCT name)
FROM employees;
_

Hitung (nama BERBEDA)

6

Dimungkinkan juga untuk memberikan daftar ekspresi yang dipisahkan dengan koma. Dalam hal ini, COUNT() mengembalikan jumlah kombinasi nilai berbeda yang tidak mengandung nilai NULL. Kueri berikut menghitung jumlah baris berbeda yang tidak memiliki nama maupun gaji NULL

SELECT name
FROM fruits;
_0

Hitung(DISTINCT nama, gaji)

6

Anda juga dapat mengelompokkan jumlah duplikat per grup menggunakan sedikit matematika sehubungan dengan klausa grup demi. Berikut kueri untuk menghitung nama ganda untuk setiap departemen

SELECT name
FROM fruits;
_1

dept_id

nama rangkap

1

0

2

0

3

1

4

0

Kueri ini membantu Anda mengkarakterisasi tingkat duplikat, tetapi tidak menunjukkan kepada Anda nilai mana yang digandakan. Untuk melihat nama mana yang digandakan dalam tabel karyawan, gunakan kueri ringkasan yang menampilkan nilai non-unik beserta hitungannya

SELECT name
FROM fruits;
_2

dept_id

nama

nama_hitung

2

Allan Smithie

1

4

Barbara Breitenmoser

1

2

Jon Simpson

1

3

Kirsten Ruegg

2

4

Kirsten Ruegg

1

2

Peter Jonson

1

1

Ralph Teller

1

Karena kami hanya tertarik pada duplikat, kami dapat memfilter yang lainnya menggunakan klausa HAVING. Ini seperti klausa WHERE, kecuali digunakan dengan group by untuk mempersempit hasil

SELECT name
FROM fruits;
_3

Sekarang kita bisa melihat nama mana yang digandakan, serta berapa jumlahnya

dept_id

nama

nama_hitung

3

Kirsten Ruegg

2

Menampilkan Nilai Minimum atau Maksimum Per-Grup dalam Baris Duplikat

Seperti yang kita lihat di contoh terakhir, grup dengan klausa menyebabkan fungsi agregat diterapkan untuk setiap nilai unik dalam daftar bidang. Anda harus menyadari bahwa kolom yang tidak ada dalam daftar grup menurut bidang tidak harus berada pada baris yang sama dengan nilai agregat. Sebuah contoh pasti ada di sini. Kueri berikut menampilkan gaji tertinggi untuk setiap departemen

SELECT name
FROM fruits;
_4

Tujuannya juga untuk menampilkan informasi tentang individu yang mendapatkan gaji tertinggi. Namun, bukan itu yang dikembalikan di sini

dept_id

nama

jenis kelamin

max_salary

1

Ralph Teller

m

5100

2

Jon Simpson

m

5200

3

Kirsten Ruegg

f

5600

4

Barbara Breitenmoser

f

5600

Masalahnya adalah gaji adalah satu-satunya bidang gabungan karena fungsi agregat Max() diterapkan padanya. Akibatnya, nama depan dan nilai jenis kelamin yang ditemui untuk setiap grup menurut bidang adalah yang ditampilkan. Melihat tabel, Anda akan melihat bahwa, sementara Ralph Teller adalah satu-satunya anggota departemen 1, Jon Simpson hanya memperoleh $4.500. Peter Jonson benar-benar pemilik perbedaan itu, tetapi mesin kueri memilih nama depan dan jenis kelamin yang ditemukan memiliki dept_id 2

Solusinya adalah menggabungkan hasil GROUP_BY dengan tabel asli menggunakan bidang yang dikelompokkan. Dalam hal ini, kami hanya memiliki satu bidang, dan itu adalah gaji

SELECT name
FROM fruits;
_5

Sekarang bidang nama dan jenis kelamin menjadi milik penerima gaji terbesar

dept_id

nama

jenis kelamin

max_salary

1

Ralph Teller

m

5100

2

Peter Jonson

m

5200

3

Kirsten Ruegg

f

5600

4

Kirsten Ruegg

f

5600

Ada teknik lain yang tidak tercakup, seperti penggunaan tabel sementara dan SQL dinamis. Berikut adalah informasi yang lebih mendalam tentang cara menghapus rekaman duplikat. Artikel ini membahas klausa group by dan HAVING secara lebih rinci

Bagaimana cara menemukan dan menghapus catatan duplikat di MySQL?

MySQL dapat menghapus rekaman duplikat terutama dengan tiga cara. .
Hapus Rekaman Duplikat Menggunakan Hapus Gabung. Kita dapat menggunakan pernyataan DELETE JOIN di MySQL yang memungkinkan kita menghapus rekaman duplikat dengan cepat. .
Hapus Data Duplikat Menggunakan Fungsi ROW_NUMBER(). .
HAPUS Baris Duplikat Menggunakan Tabel Perantara

Bagaimana cara menemukan dan menghapus baris duplikat?

Hapus nilai duplikat .
Pilih rentang sel yang memiliki nilai duplikat yang ingin Anda hapus. Tip. Hapus kerangka atau subtotal apa pun dari data Anda sebelum mencoba menghapus duplikat
Klik Data > Hapus Duplikat, lalu Di Bawah Kolom, centang atau hapus centang pada kolom tempat Anda ingin menghapus duplikat. .
Klik Oke

Bagaimana cara menemukan baris duplikat di MySQL?

Kita dapat menemukan entri duplikat dalam tabel menggunakan langkah-langkah di bawah ini. .
Pertama, kita akan menggunakan klausa GROUP BY untuk mengelompokkan semua baris berdasarkan kolom yang diinginkan. .
Kedua, kita akan menggunakan fungsi COUNT() di klausa HAVING yang memeriksa grup, yang memiliki lebih dari satu elemen

Bagaimana cara menghapus baris duplikat yang tepat di SQL?

Untuk menghapus baris duplikat dari tabel di SQL Server, ikuti langkah-langkah berikut. .
Temukan baris duplikat menggunakan klausa GROUP BY atau fungsi ROW_NUMBER()
Gunakan pernyataan DELETE untuk menghapus baris duplikat