计算具有多个条件的两个表

时间:2020-12-19 00:26:05

标签: mysql sql count subquery sql-like

我有两张桌子,

<块引用>

fenotipos

id           DTHHRDX sex
GTEX-1117F   0       2
GTEX-ZE9C    2       1
K-562        1       2
<块引用>

属性

SAMPID                         SMTS
K-562-SM-26GMQ                 Blood vessel
K-562-SM-2AXTU                 Blood_dry
GTEX-1117F-0003-SM-58Q7G       Brain
GTEX-ZE9C-0006-SM-4WKG2        Brain
GTEX-ZE9C-0008-SM-4E3K6        Urine
GTEX-ZE9C-0011-R11a-SM-4WKGG   Urine

我需要知道有多少女性 (sex=2) 有 DTHHRDX = 1 并且在 SMTS 上有血。

例如,本例中的答案是 2

1 个答案:

答案 0 :(得分:2)

你可以这样做:

select count(*) as cnt
from fenotipos f
where 
    sex = 2
    and exists (
        select 1
        from atributos a
        where a.sampid like concat(f.id, '%') and a.smts like 'Blood%'
    )

这会正确处理 atributos 中潜在的多个匹配

或者,您可以加入:

select count(distinct f.id) as cnt
from fenotipos f
inner join atributos a on a.sampid like concat(f.id, '%')
where f.sex = 2 and a.smts like 'Blood%'

如果没有重复,则在第二个查询中 count(*)count(distinct f.id) 更有效。