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

SQL mengembalikan 100 baris acak untuk setiap usia

Anda dapat menggunakan variabel yang ditentukan pengguna di bawah kueri akan memberi Anda satu catatan per setiap usia yang berbeda, kueri dalam hanya memeriksa usia yang sama dan memberikan peringkat kepada mereka seperti untuk 4 usia yang sama (usia =1) peringkat akan menjadi 1,2,3 ,4 dan ketika usia =2 maka nomor peringkat akan mulai dari 1 lagi dan di mana filter kueri luar memfilter baris untuk menunjukkan peringkat di mana 1 sehingga untuk setiap usia yang berbeda Anda akan mendapatkan satu baris dan mereka diurutkan secara acak

SELECT  c.name, c.Gender, c.Age, c.MP, c.score
FROM (
SELECT i.name, i.Gender, i.Age, i.MP, b.score,
@r:= CASE WHEN @g = i.Age THEN @r + 1 ELSE 1 END rownum,
@g:=i.Age
FROM i
INNER JOIN b ON b.name=i.name
CROSS JOIN(SELECT @g:=NULL ,@r:=0) a
WHERE i.MP='F' AND i.gender='F' AND b.score<=-1
ORDER BY  i.Age, RAND()
) c
WHERE c.rownum = 1
ORDER BY c.Age
LIMIT 100

misalkan kueri gabungan Anda memberi Anda hasil sebagai

Contoh kumpulan data

name   gender  Age  Mp score
============================
test1  male    1    1   10
test2  male    1    1   10
test3  male    1    1   10
test4  male    2    1   10
test5  male    2    1   10
test6  male    3    1   10
test7  male    4    1   10
test8  male    4    1   10
.....

Sekarang menggunakan kueri dalam dalam jawaban saya akan memberi Anda kumpulan hasil dengan kolom peringkat seperti di bawah ini

Set hasil kueri dalam

name   gender  Age  Mp score rank
==================================
test2  male    1    1   10    1
test1  male    1    1   10    2
test3  male    1    1   10    3
test4  male    2    1   10    1
test5  male    2    1   10    2
test6  male    3    1   10    1
test7  male    4    1   10    1
test8  male    4    1   10    2

Seperti pada kumpulan hasil di atas, Anda dapat melihat untuk usia =1 memiliki 3 baris dan peringkatnya berbeda 1,2,3 contoh yang sama untuk usia =2 peringkat adalah 1,2 sama untuk usia =4,Sekarang dalam jawaban saya kueri luar akan menyaring hasil di mana rank =1 sehingga hasil akhir set akan berisi satu baris untuk masing-masing berbeda seperti lihat di bawah hasil set

Hasil akhir

name   gender  Age  Mp score rank
==================================
test2  male    1    1   10    1
test4  male    2    1   10    1
test6  male    3    1   10    1
test7  male    4    1   10    1

Bagian pengurutan acak dilakukan pada kueri dalam karena Anda dapat melihat urutan per bagian ORDER BY i.Age, RAND() pertama-tama akan mengurutkan usia secara menaik dan kemudian untuk nilai usia yang sama selanjutnya akan mengurutkan hasil secara acak. Semoga masuk akal



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_fetch_array tambahkan semua baris?

  2. Masalah Varchar di Mysql 2147483647

  3. bagaimana cara memasukkan karakter unicode ke mysql dengan pernyataan insert?

  4. Mengapa executemany lambat di Python MySQLdb?

  5. Bagaimana INNER JOIN 3 tabel menggunakan CodeIgniter