Xav*_*uza 4 mysql sql database group-by self-join
我有一张桌子:
Parent Child Educated
'P1', 'C1', 'YES'
'P1', 'C2', 'YES'
'P1', 'C3', 'NO'
'P2', 'C11', 'YES'
'P2', 'C12', 'NO'
'P3', 'C21', 'YES'
'P3', 'C22', 'YES'
'P4', 'C31', 'NO'
'P4', 'C32', 'NO'
Run Code Online (Sandbox Code Playgroud)
现在,我需要找到所有孩子都接受过教育的父母,即 Educated='YES'。
就像在上面的情况下父'P3'
任何人都可以提出一个查询来获取这个
我会这样做:
select parent
from t
group by parent
having max(educated) = min(educated) and max(educated) = 'YES';
Run Code Online (Sandbox Code Playgroud)
如果educated可以的话,逻辑稍微复杂一些NULL。
实际上,如果值只是'YES'or 'NO',你可以做更简单的:
select parent
from t
group by parent
having min(educated) = 'YES';
Run Code Online (Sandbox Code Playgroud)
select parent,
sum(case when educated='YES' then 1 else 0 end) as sum_educated,
count(*) as count_all
from t
group by parent
having count_all=sum_educated
Run Code Online (Sandbox Code Playgroud)