a query to generate 5 random DNA sequences that are each about 20 bases, [duplicate]

♀尐吖头ヾ 提交于 2020-07-10 08:46:09

问题


I got this query to solve for the first 20 but I don’t know how to extend that to the 5 rows

prepare dna_length(int) as
  with t1 as (
    select chr(65) as s 
      union select chr(67) 
      union select chr(71) 
      union select chr(84) )
, t2 as ( select s, 
            row_number() over() as rn from t1)
, t3 as ( select generate_series(1,$1) as i,
            round(random() * 4 + 0.5) as rn )
, t4 as ( select t2.s 
            from t2 join t3 on (t2.rn=t3.rn))
select 
  array_to_string(array(select s from t4),'') as dna ;

enter image description here


回答1:


Does this work for you? You can put the $1 back to replace the 20 in t3 if it does.

with t1 as (
    select 1 as rn, 'A' as s
    union select 2, 'C' 
    union select 3, 'T' 
    union select 4, 'G' 
), t2 as (
    select generate_series(1, 5) as sample
), t3 as ( 
    select t2.sample, generate_series(1,20) as i,
           round(random() * 4 + 0.5) as rn 
      from t2
), t4 as (
    select t3.sample, t3.i, t3.rn, t1.s
      from t3 
      join t1 on t1.rn = t3.rn
) 
select sample, string_agg(s, '' order by i) 
  from t4
 group by sample
 order by sample;

 sample |      string_agg      
--------+----------------------
      1 | AGCATCAAGCGGTAAAAAAG
      2 | ATATCGCGCCGAGGGAAGAC
      3 | GAAACCCCATCTTAACTGGA
      4 | AGTGAGGCCGCCACTCTACC
      5 | AGTCCCCACAACGATTAGAA
(5 rows)


来源:https://stackoverflow.com/questions/62584420/a-query-to-generate-5-random-dna-sequences-that-are-each-about-20-bases

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!