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

Dapatkan catatan dengan nilai maksimal untuk setiap grup hasil SQL yang dikelompokkan

Solusi yang benar adalah:

SELECT o.*
FROM `Persons` o                    # 'o' from 'oldest person in group'
  LEFT JOIN `Persons` b             # 'b' from 'bigger age'
      ON o.Group = b.Group AND o.Age < b.Age
WHERE b.Age is NULL                 # bigger age not found

Cara kerjanya:

Ini cocok dengan setiap baris dari o dengan semua baris dari b memiliki nilai yang sama di kolom Group dan nilai yang lebih besar di kolom Age . Setiap baris dari o tidak memiliki nilai maksimum grupnya di kolom Age akan cocok dengan satu atau beberapa baris dari b .

LEFT JOIN membuatnya cocok dengan orang tertua dalam grup (termasuk orang-orang yang sendirian di grup mereka) dengan baris penuh NULL s dari b ('tidak ada usia terbesar dalam grup').
Menggunakan INNER JOIN membuat baris ini tidak cocok dan diabaikan.

WHERE klausa hanya menyimpan baris yang memiliki NULL s di bidang yang diekstraksi dari b . Mereka adalah orang-orang tertua dari setiap kelompok.

Bacaan lebih lanjut

Solusi ini dan banyak lainnya dijelaskan dalam buku SQL Antipatterns:Menghindari Perangkap Pemrograman Basis Data



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tampilkan (Daftar) Database MySQL di Linux melalui Command Line

  2. Bagaimana memilih dari MySQL di mana nama Tabel adalah Variabel

  3. Cara "Unhex" Nomor di MySQL

  4. Bagaimana Anda membuat versi skema database Anda?

  5. phpMyBackupPro – Alat Pencadangan MySQL Berbasis Web untuk Linux