2016-12-29 6 views
2

Ich habe eine Tabelle USERS, die demografische Informationen enthält. Der Kürze halber kann eine der Spalten AGE einen von fünf Werten haben (16, 17, 18, 19, 20).Wählen Sie zufällig aus SQL-Tabelle, die gleichmäßig über die verschiedenen Werte einer Spalte verteilt

Ich möchte eine SQL-Abfrage, die mir sagen, 100 zufällige Auswahlen von USERS, die gleichmäßig über die verschiedenen Altersgruppen verteilt sind, so würde ich ungefähr (oder genau) 20 Einträge erhalten, wo AGE = 16, 20 Einträge wo Alter = 17, und so weiter.

Ich werde irgendwann über mehrere Spalten verteilen müssen (zB Ergebnisse mit einer gleichmäßigen Verteilung über AGE und RACE und INCOME), aber ich muss zumindest damit anfangen, dass ich weiß, wie man sich gleichmäßig über eine Spalte verteilt.

+0

können Sie Ihr dbms markieren? –

Antwort

2
(SELECT * FROM users WHERE age = 16 ORDER BY random() LIMIT 20) 
UNION ALL 
(SELECT * FROM users WHERE age = 17 ORDER BY random() LIMIT 20) 
UNION ALL 
... 

Alle Klammern sind erforderlich.

Mögliche Leistungsoptimierung für große Tabellen hängt davon ab, genaue Details Ihrer Einrichtung und Anforderungen.

Verwandte:

0

prüfen diese.

 with first_random as 
     (
      SELECT * FROM users where age = '16' OFFSET floor(random()) LIMIT 20 
     ) 
     , second_random as 
     (
      SELECT * FROM users where age = '17' OFFSET floor(random()) LIMIT 20 
     ) 
     , third_random as 
     (
      SELECT * FROM users where age = '18' OFFSET floor(random()) LIMIT 20 
     ), fourth_random as 
     (
      SELECT * FROM users where age = '19' OFFSET floor(random()) LIMIT 20 
     ) 
     , Fifth_random as 
     (
      SELECT * FROM users where age = '20' OFFSET floor(random()) LIMIT 20 
     ) 

     select * from first_random 
     union 
     select * from second_random 
     union 
     select * from third_random 
     union 
     select * from fourth_random 
     union 
     select * from fifth_random 

überprüfen Sie auch Live-Demo Here

Verwandte Themen