sql >> Database teknologi >  >> RDS >> Mysql

SQL returnerer 100 tilfældige rækker for hver alder

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



  1. Hvordan man kører eller indlæser .po/.mo-filer til lokalisering i php

  2. Oracle (+) operatør

  3. Opdater en MySQL-tabel med rekordrangeringer inden for grupper

  4. Hvad er primær nøglebegrænsning i SQL Server-database - SQL Server / T-SQL vejledning del 54