我正在使用两个表:目标表有mid,gid和miRNA表有mid,miRNA_name。 (mid是miRNA的ID,gid是基因的ID)。
我想列出最常见的基因调控的前10种miRNA。每行应该有miRNA id#1,miRNA名称#1,miRNA id#2,miRNA名称#2和共同基因的数量。
目标表格:
mid gid
1 1
1 297
1 305
2 198
2 209
3 209
3 297
miRNA表格ex:
mid name
1 hsa-miR-4711
2 hsa-miR-36
3 hsa-miR-54
我想我需要将这两个表分组到mid,然后按gid排序。有了这个,我应该找到哪些mids有共同的gid,并按照select子句中的指定列出它们以及常见基因数(count gid)。
到目前为止,我有以下内容,但我不确定这是否正确。任何帮助将非常感激。先感谢您! :)
SELECT m.mid, m.name, n.mid, n.name, COUNT (*)
FROM (SELECT mid, gid FROM miRNA JOIN targets USING (mid)) as m
AND (SELECT mid, gid FROM miRNA JOIN targets USING (mid)) as n
WHERE COUNT(*)>1
GROUP BY gid
LIMIT 10;
输出应如下所示:
mid1 name1 mid2 name2 count
1 hsa-miR-4711 3 hsa-miR-54 297
2 hsa-miR-36 3 hsa-miR-54 209
答案 0 :(得分:0)
只是为了确认......你只关心最常见的两个miRNA条目。因此,实质上,将miRNA#1与miRNA#2的所有gID,miRNA#3的gID等进行比较。
如果m#7与m#58共有7个基因组ID,而m#23与m#49等共有6个共同...下游,但m#7也可能有5个共同点米#38。如果是这样,您的此示例列表将显示类似的内容miNRA7 (17's name) miNRA 58 (58's name) 7
miNRA23 (23's name) miNRA 49 (49's name) 6
miNRA7 (17's name) miNRA 38 (38's name) 5
如果是这种情况,我会自行加入连接以获得合格的,然后获取名称。我会确保你的TARGETS表作为(gid,mid)的索引作为一个索引,而不是两个单独的索引。
select
TopPairs.mid,
m1.name as NRAName1,
TopPairs.AltMID,
m2.name as NRAName2,
TopPairs.PairCount
from
( select
t1.mid,
t2.mid as AltMID,
count(*) as PairCount
from
Targets t1
JOIN Targets t2
t1.gid = t2.gid
AND t1.mid < t2.mid
group by
t1.mid,
t2.mid
having
count(*) > 1
order by
count(*) DESC
limit 10 ) TopPairs
JOIN miRNA m1
on TopPairs.mid = m1.mid
JOIN miRNA m2
on TopPairs.AltMID = m2.mid
加入&#34; t2&#34;别名(第二个实例)首先显式匹配匹配的gID,但仅适用于t2.mid比t1.mid更大的那些。这样#1与#2,#3,#4等相比,但永远不需要将#2,#3或#4比作#1,因为它们已经完成了。
只有在基因组比较完成后你才能获得有限列表,并加入指定的miNRA表来获取输出的显式名称。如果要丢弃300k基因组比较并保持10,则无需获取这些细节。获得10,然后加入。