Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

GROUP BY tidak menghapus duplikat

GROUP BY tidak "menghapus duplikat". GROUP BY memungkinkan untuk agregasi. Jika Anda hanya ingin menggabungkan baris duplikat, gunakan SELECT DISTINCT.

Jika Anda perlu menggabungkan baris yang merupakan duplikat di beberapa kolom, gunakan GROUP BY tetapi Anda perlu menentukan apa yang harus dilakukan dengan kolom lainnya. Anda dapat menghilangkannya (dengan tidak mencantumkannya dalam klausa SELECT) atau menggabungkannya (menggunakan fungsi seperti SUM, MIN, dan AVG). Misalnya:

SELECT watch.watch_id, COUNT(rec.street_number), MAX(watch.watch_date)
... GROUP by watch.watch_id

EDIT

OP meminta beberapa klarifikasi.

Pertimbangkan "tampilan" -- semua data yang disatukan oleh FROM dan JOIN dan WHERE -- sebut itu V. Ada dua hal yang mungkin ingin Anda lakukan.

Pertama, Anda mungkin memiliki baris duplikat sepenuhnya yang ingin Anda gabungkan:

a b c
- - -
1 2 3
1 2 3
3 4 5

Kemudian cukup gunakan DISTINCT

SELECT DISTINCT * FROM V;

a b c
- - -
1 2 3
3 4 5

Atau, Anda mungkin memiliki baris duplikat sebagian yang ingin Anda gabungkan:

a b c
- - -
1 2 3
1 2 6
3 4 5

Dua baris pertama itu "sama" dalam beberapa hal, tetapi jelas berbeda dalam arti lain (khususnya, keduanya tidak digabungkan dengan SELECT DISTINCT). Anda harus memutuskan bagaimana menggabungkannya. Anda dapat membuang kolom c sebagai tidak penting:

SELECT DISTINCT a,b FROM V;

a b
- -
1 2
3 4

Atau Anda bisa melakukan semacam agregasi pada mereka. Anda dapat menambahkannya:

SELECT a,b, SUM(c) "tot" FROM V GROUP BY a,b;

a b tot
- - ---
1 2 9
3 4 5

Anda bisa menambahkan memilih nilai terkecil:

SELECT a,b, MIN(c) "first" FROM V GROUP BY a,b;

a b first
- - -----
1 2 3
3 4 5

Atau Anda dapat mengambil mean (AVG), standar deviasi (STD), dan salah satu dari sekumpulan fungsi lain yang mengambil sekumpulan nilai untuk c dan menggabungkannya menjadi satu.

Apa yang sebenarnya bukan pilihan adalah tidak melakukan apa-apa. Jika Anda hanya membuat daftar kolom yang tidak dikelompokkan, DBMS akan membuat kesalahan (Oracle melakukannya - pilihan yang tepat, imo) atau memilih satu nilai lebih atau kurang secara acak (MySQL). Tetapi seperti yang dikatakan Dr. Peart, "Ketika Anda memilih untuk tidak memutuskan, Anda tetap telah membuat pilihan."



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. masalah dengan OneToMany termasuk klausa filter di musim semi jpa

  2. Kesalahan 2002 Koneksi ditolak pada PHP yang terhubung ke MySQL yang berjalan di MAMP

  3. 4 Cara Mendaftar Semua Tabel di Database MySQL

  4. Cara menggunakan pemetaan data dengan kueri sql

  5. Bergabunglah dengan dua tabel dengan semua catatan