计算两个表之间的平均值(JOIN)

时间:2012-10-29 23:52:36

标签: sql

表PROBE看起来像这样:

'ProbeID'----- 'TranscriptID' ---- 'Start'---- 'End'

'1056'-----------'7981326'----------'1013'---'1010'

'1057'-----------'7878826'----------'1011'---'1015'

etc..

表EXPRESSION2如下所示:

'ProbeID'----- 'SampleID' ---- 'Value'

'10425'---------'7981326'-----'16.55''

'11123'---------'7878826'----- '3.55'

etc..

我需要找到转录本中最大的100个差异(即取探针的平均值)。

基本上,我需要将EXPRESSION2表的ProbeID与PROBE表中的TranscriptID相关联,并计算前100名的平均值。

我尝试了下面的代码,但不断返回“null”。任何替代脚本将不胜感激。我想我错过了什么。

EXPRESSION2表没有空值,fyi

`选择平均值(值)

来自expression2

    where probeID in  
                    (   
                      select P.ProbeId 
                           from Probe P
                            join Transcript T on P.TranscriptID = T.TranscriptID

)`

限制100;`

2 个答案:

答案 0 :(得分:0)

如果要消除空值

select e.probeID, avg(value) as avarage
from expression2 e
    inner join 
    (
        select P.ProbeId 
        from Probe P 
            join Transcript T on P.TranscriptID = T.TranscriptID    
    ) p on e.probeID = p.probeID
where e.value is not null
group by e.probeID

如果你想把它们当作0

select e.probeID, avg(COALESCE(value,0)) as avarage
from expression2 e
    inner join 
    (
        select P.ProbeId 
        from Probe P 
            join Transcript T on P.TranscriptID = T.TranscriptID    
    ) p on e.probeID = p.probeID
group by e.probeID

答案 1 :(得分:0)

您使用的是哪个DBMS?重要的是示例中的两个表中没有匹配的ProbeID,但是有匹配的TranscriptID / SampleID对吗?

Select Top 100
  p.TranscriptID,
  Avg(e.Value)
From
  Probe p
    Inner Join
  Expression2 e
     on p.ProbeID = e.ProbeID
Group By
  p.TranscriptID
Order By
  2 Desc