我想在Sqlite中生成N组随机数。
现在,我得到的最好的就是将random()
这样的一组电话联合起来
create view random_view as
select random()
union select random()
union select random()
union select random()
union select random()
;
也许有人有一个更聪明的解决方案可以生成N个数字?
答案 0 :(得分:3)
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>
答案 1 :(得分:2)
没试过,但也许这个?给定任何至少N行的表,
SELECT RANDOM() FROM anytable LIMIT ?
用N替换?
。
答案 2 :(得分:0)
如果你需要数百万行并且有shell / bash,那么这可能就足够了:
echo -e '.import "/dev/stdin" mytable\n'; sleep 0.5 ; for i in {1..10000000}; do echo $RANDOM; done) | sqlite3 my.db
睡眠步骤对于防止sqlite因缓冲而将第一个数字作为SQL命令读取至关重要。 YMMV
答案 3 :(得分:0)
您可以使用recursive query。
此查询生成一个包含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;