Rumah > Soal Jawab > teks badan
Mendapat jawapan khusus MySQL yang baik daripada @Bohemian: </p> <pre class="brush:php;toolbar:false;">pilih * daripada (pilih * daripada susunan jadual saya mengikut `Kumpulan`, Penerangan umur, Orang) x kumpulan mengikut `Kumpulan`</pre> <p>Alangkah baiknya jika dapat membina perkara ini, tetapi saya tidak dapat melihat caranya. </p>
P粉3402642832023-08-22 19:25:52
Dalam pangkalan data lain anda boleh gunakan ROW_NUMBER
来实现此功能。MySQL不支持ROW_NUMBER
tetapi anda boleh mensimulasikannya menggunakan pembolehubah:
SELECT person, groupname, age FROM ( SELECT person, groupname, age, @rn := IF(@prev = groupname, @rn + 1, 1) AS rn, @prev := groupname FROM mytable JOIN (SELECT @prev := NULL, @rn := 0) AS vars ORDER BY groupname, age DESC, person ) AS T1 WHERE rn <= 2
Demo dalam talian: sqlfiddle
Edit Saya baru perasan bahawa bluefeet menyiarkan jawapan yang hampir serupa: +1 kepadanya. Tetapi jawapan ini mempunyai dua kelebihan kecil:
Jadi saya akan menyimpannya sekiranya ia membantu seseorang.
P粉4045397322023-08-22 13:19:02
Berikut ialah cara untuk menambah pertanyaan menggunakan UNION ALL
(请参见带有演示的SQL Fiddle)。这适用于两个组,如果你有多个组,则需要指定group
编号并为每个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 )
Terdapat pelbagai cara untuk mencapai matlamat ini, sila rujuk artikel ini untuk menentukan kaedah terbaik untuk situasi anda:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Editor:
Ini mungkin berfungsi untuk anda juga, ia menjana nombor baris untuk setiap rekod. Menggunakan contoh daripada pautan di atas, ia hanya akan mengembalikan rekod dengan nombor baris kurang daripada 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