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