select count(distinct cgi.sample)由于impala不允许set操作或select语句中的子查询,我很难弄清楚如何用返回的行总数除以列值。我的最终目标是计算每个基因的次要等位基因频率chr:start position.
我的数据结构如下:
| chr | start | stop | ref | allele1seq | allele2seq | sample_id |
| 6 | 66720709 | 66720710 | A | A | T | 101-46-3 |
| 7 | 66720809 | 66720810 | GG | GA | GG | 101-46-3 |
我想做一些类似于下面的查询:
WITH vars as
(SELECT cgi.chr, cgi.start, concat(cgi.chr, ':', CAST(cgi.start AS STRING)) as pos, cgi.ref, cgi.allele1seq, cgi.allele2seq,
CASE
WHEN (cgi.allele1seq = cgi.ref AND cgi.allele2seq <> cgi.ref) THEN '1'
WHEN (cgi.allele1seq <> cgi.ref AND cgi.allele2seq = cgi.ref) THEN '1'
WHEN (cgi.allele1seq = cgi.ref AND cgi.allele2seq = cgi.ref) THEN '2'
ELSE '0' END as ma_count
FROM comgen_variants as cgi)
SELECT vars.*, (CAST(vars.ma_count as INT)/
((SELECT COUNT(DISTINCT cgi.sample_id) from comgen_variants as cgi) * 2)) as maf
FROM vars
我想要的输出是:
| chr | start | ref | allele1seq | allele2seq | ma_count | maf |
| 6 | 66720709 | A | A | T | 1 | .05 |
| 7 | 66720809 | GG | GG | GG | 0 | 0 |
除了找出一种除以行数的方法外,我还需要将结果按chr和pos分组,然后计算每个备用等位基因(其中等位基因1seq和等位基因2seq不等于ref)出现的次数,而不是像上面那样简单地按行计数;但我还没到那一步,因为计数的问题。
事先谢谢你的帮助。
1条答案
按热度按时间vqlkdk9b1#
看起来你可以计算出
total number of distinct sample_ids*2
然后将其用于后续查询,因为每行的值不会更改。如果该值确实依赖于行,那么您可能需要查看impala可用的分析/窗口函数。但是,既然看起来你不需要这样做,你可以做如下的事情:
不过,我不确定次要等位基因的频率是多少;似乎你想为每个基因座选择第二个最常见的等位基因频率?