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

2 catatan teratas MySQL per grup

Ide Anda sudah dekat. Saya pikir ini akan bekerja lebih baik:

select u.*
from (select user_id, created_datetime, 
             $num := if(@user_id = user_id, @num + 1,
                        if(@user_id := id, 1, 1)
                       ) as row_number
      from logs cross join
           (select @user_id := 0, @num := 0) params
      order by user_id 
     ) u
where row_number <= 2 ;

Berikut perubahannya:

  • Variabel diatur hanya dalam satu ekspresi. MySQL tidak menjamin urutan evaluasi ekspresi, jadi ini penting.
  • Pekerjaan dilakukan di subkueri, yang kemudian diproses di kueri luar.
  • Subquery menggunakan order by , bukan group by .
  • Kueri luar menggunakan where bukannya having (sebenarnya, di MySQL having akan bekerja, tetapi where lebih tepat).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara yang lebih baik untuk memilih semua kolom dari tabel pertama dan hanya satu kolom dari tabel kedua pada gabungan bagian dalam

  2. Mengatasi kesalahan MySQL Deadlock ditemukan saat mencoba mendapatkan kunci; coba mulai ulang transaksi

  3. Menampilkan gambar dari database MySQL pada satu kolom JTable

  4. MySQL Query ORDER BY nilai-nilai tertentu sebelum yang lain

  5. Cara Mengembalikan Posisi Item Daftar di MySQL