Du kan bruge brugerdefinerede variabler under forespørgsel vil give dig én post for hver særskilt alder, indre forespørgsel er bare at tjekke for samme aldre og give rang til dem som for 4 samme aldre (alder =1) rang vil være 1,2,3 ,4 og når alder =2, starter rangnummeret fra 1 igen, og hvor filteret for den ydre forespørgsel filtrerer rækker for at vise, hvor rangeringen er 1, så for hver særskilt alder vil du få en række, og de er ordnet tilfældigt
SELECT c.name, c.Gender, c.Age, c.MP, c.scoreFROM (SELECT i.name, i.Gender, i.Age, i.MP, b.score,@r :=TILFÆLDE NÅR @g =i.Alder SÅ @r + 1 ANDET 1 END rownum,@g:=i.AlderFRA iINNER JOIN b PÅ b.navn=i.navnCROSS JOIN(SELECT @g:=NULL ,@r:=0) aWHERE i.MP='F' OG i.gender='F' OG b.score<=-1ORDER BY i.Age, RAND()) cWHERE c.rownum =1ORDER BY c.AgeLIMIT 100
lad os antage, at din tilknyttede forespørgsel giver dig resultaterne som
Eksempel på datasæt
navn køn Alder Mp score=============================test1 mand 1 1 10test2 mand 1 1 10test3 mand 1 1 10test4 mand 2 1 10test5 mand 2 1 10test6 mand 3 1 10test7 mand 4 1 10test8 mand 4 1 10.....
Nu ved at bruge den indre forespørgsel i mit svar vil du få resultatsæt med rangeringskolonne som nedenfor
Indre forespørgselsresultatsæt
navn køn Alder Mp-score rang===================================test2 mand 1 1 10 1test1 mand 1 1 10 2test3 mand 1 1 10 3test4 mand 2 1 10 1test5 mand 2 1 10 2test6 mand 3 1 10 1test7 mand 4 1 10 1test8 mand 4 1 10 2
Som i ovenstående resultatsæt kan du se for alder =1 har 3 rækker og deres rækker er forskellige 1,2,3 samme eksempel for alder =2 rækker er 1,2 ens for alder =4, Nu i mit svar vil den ydre forespørgsel filtrer resultatet fra, hvor rang =1, så det endelige resultatsæt vil indeholde en række for hver enkelt, som se nedenfor resultatsæt.
Endelig output
navn køn Alder Mp-score rang===================================test2 mand 1 1 10 1test4 mand 2 1 10 1test6 mand 3 1 10 1test7 mand 4 1 10 1
Den tilfældige bestillingsdel udføres ved den indre forespørgsel, da du kan se rækkefølgen efter del
ORDER BY i.Age, RAND()
den vil først sortere alderen på stigende måde, og derefter for samme aldersværdier vil den yderligere sortere resultater tilfældigt. Håber det giver mening