우리는 필요한 결과를 얻을 수있는 방법을 개발했습니다 : 연속적인 블록의 행, 각 블록에는 '고양이'중복이없고 'id'중복은 전혀 없습니다.
그것은 쿼리 지향보다 수학적이지만, 어쨌든 우리의 필요에 부합합니다.
CREATE TEMPORARY TABLE a(nr INTEGER PRIMARY KEY, sort, id, cat);
INSERT INTO temp.a(id, cat) SELECT id, cat FROM tabela WHERE cat = 'A' ORDER BY random() limit 3;
INSERT INTO temp.a(id, cat) SELECT id, cat FROM tabela WHERE cat = 'B' ORDER BY random() limit 3;
INSERT INTO temp.a(id, cat) SELECT id, cat FROM tabela WHERE cat = 'C' ORDER BY random() limit 3;
INSERT INTO temp.a(id, cat) SELECT id, cat FROM tabela WHERE cat = 'D' ORDER BY random() limit 3;
INSERT INTO temp.a(id, cat) SELECT id, cat FROM tabela WHERE cat = 'E' ORDER BY random() limit 3;
UPDATE temp.a SET sort=100 where nr=1;
UPDATE temp.a SET sort=92+(select abs(random()%(2))*16) where nr=4;
UPDATE temp.a SET sort=88+(select abs(random()%(4))*8) where nr=7;
UPDATE temp.a SET sort=86+(select abs(random()%(8))*4) where nr=10;
UPDATE temp.a SET sort=85+(select abs(random()%(16))*2) where nr=13;
UPDATE temp.a SET sort=200 where nr=2;
UPDATE temp.a SET sort=192+(select abs(random()%(2))*16) where nr=5;
UPDATE temp.a SET sort=188+(select abs(random()%(4))*8) where nr=8;
UPDATE temp.a SET sort=186+(select abs(random()%(8))*4) where nr=11;
UPDATE temp.a SET sort=185+(select abs(random()%(16))*2) where nr=14;
UPDATE temp.a SET sort=300 where nr=3;
UPDATE temp.a SET sort=292+(select abs(random()%(2))*16) where nr=6;
UPDATE temp.a SET sort=288+(select abs(random()%(4))*8) where nr=9;
UPDATE temp.a SET sort=286+(select abs(random()%(8))*4) where nr=12;
UPDATE temp.a SET sort=285+(select abs(random()%(16))*2) where nr=15;
SELECT id, cat FROM temp.a ORDER BY sort;
DROP TABLE a;
당신은, 당신은 (http://www.sqlitetutorial.net/sqlite-union/) [여기]은 exaple을 찾을 수있는 서버에 하나의 쿼리를 실행하는 UNION 절을 사용할 수 있습니다
루벤스 - 아마 랄 –
감사합니다 @ 당신 @DanIonescu 귀하의 제안에 대한,하지만 내 접혀 무작위 요구 사항은 어떨까요? 죄송합니다. UNION을 사용하면이를 달성하는 방법을 알 수 없습니다. –
매번 세 그룹의 결과가 매번 고유하거나, maby B, D, A, C, B가 허용 가능합니까 @ rubens-amaral입니까? –