mySQL:查找两列之间最常见的值

时间:2015-02-18 21:14:28

标签: mysql

我正在使用两个表:目标表有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

1 个答案:

答案 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,然后加入。