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

Dapatkan n catatan teratas untuk setiap grup hasil yang dikelompokkan

Berikut ini salah satu cara untuk melakukannya, menggunakan UNION ALL (Lihat SQL Fiddle dengan Demo ). Ini berfungsi dengan dua grup, jika Anda memiliki lebih dari dua grup, maka Anda perlu menentukan group nomor dan tambahkan kueri untuk setiap group :

(
  select *
  from mytable 
  where `group` = 1
  order by age desc
  LIMIT 2
)
UNION ALL
(
  select *
  from mytable 
  where `group` = 2
  order by age desc
  LIMIT 2
)

Ada berbagai cara untuk melakukannya, lihat artikel ini untuk menentukan rute terbaik untuk situasi Anda:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

Sunting:

Ini mungkin bekerja untuk Anda juga, ini menghasilkan nomor baris untuk setiap catatan. Menggunakan contoh dari tautan di atas, ini hanya akan mengembalikan catatan dengan nomor baris kurang dari atau sama dengan 2:

select person, `group`, age
from 
(
   select person, `group`, age,
      (@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number 
  from test t
  CROSS JOIN (select @num:=0, @group:=null) c
  order by `Group`, Age desc, person
) as x 
where x.row_number <= 2;

Lihat Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Neo4j - Memilih data dengan MATCH menggunakan Cypher

  2. Menginstal Percona XtraDB Cluster di CentOS 7

  3. Instal dan Gunakan Percona Toolkit di Centos 7

  4. Biarkan pengguna MySQL membuat database, tetapi izinkan akses hanya ke database mereka sendiri

  5. Bagaimana saya bisa menemukan karakter non-ASCII di MySQL?