генерировать несколько случайных чисел в sqlite - PullRequest
4 голосов
/ 12 мая 2011

Я хотел бы сгенерировать набор случайных чисел размера N в Sqlite.

Сейчас лучшее, что у меня есть, - объединить набор вызовов в random(), например,

* 1005.*

Может быть, у кого-то есть более умное решение, которое может генерировать N чисел?

Ответы [ 4 ]

3 голосов
/ 12 мая 2011
create temp table rtab (x integer primary key, v default (random()));

create temp trigger rtrig 
before insert on rtab
when new.x > 0 begin
   insert or replace into rtab (x) values (new.x - 1); 
end;

PRAGMA recursive_triggers = on;

insert into rtab (x) values (9);

sqlite> select * from rtab;
0|-6742468521271879323
1|-8020364160821973904
2|4567559116463208288
3|5330277995838989553
4|-9000358059551141276
5|-7148307065140334921
6|8156512560793181351
7|-10751076681323044
8|-7335834651732027766
9|6837665741304560539
sqlite> 
2 голосов
/ 12 мая 2011

Не пробовал, но может это? Для любой таблицы, содержащей не менее N строк,

SELECT RANDOM() FROM anytable LIMIT ?

с заменой ? на N.

0 голосов
/ 09 июля 2014

Вы можете использовать рекурсивный запрос .

Этот запрос генерирует таблицу с 1000 случайными числами:

CREATE TABLE test(field1);

INSERT INTO test
  WITH RECURSIVE
    cte(x) AS (
       SELECT random()
       UNION ALL
       SELECT random()
         FROM cte
        LIMIT 1000
  )
SELECT x FROM cte;
0 голосов
/ 28 сентября 2012

Если вам нужны миллионы строк и у вас есть shell / bash, этого может быть достаточно:

echo -e '.import "/dev/stdin" mytable\n'; sleep 0.5 ; for i in {1..10000000}; do echo $RANDOM; done) | sqlite3 my.db

Шаг ожидания важен для предотвращения чтения первых чисел в виде SQL-команд sqlite из-за буферизации. YMMV

...