SQL查询查找至少有2个男性和2个女性孩子的记录

Sup*_*Sam 1 sql self-join

在一次采访中,我被要求找出每种性别至少有一个孩子的父母的姓名,即至少 1 名男性和 1 名女性。我解决了这个问题。然后他们修改了问题以查找至少有 2 个男孩和 2 个女孩的父母的姓名。这是表: 表名称:Children

这是我用于第一次询问的查询:

SELECT distinct C1.Parent_Name 
FROM Children C1 
JOIN Children C2
  ON C1.Parent_Name = C2.Parent_Name
WHERE C1.Child_Gender = 'Male' AND C2.Child_Gender = 'Female';
Run Code Online (Sandbox Code Playgroud)

您能帮忙解答一下第二个问题吗?

D-S*_*hih 5

您可以尝试使用条件聚合函数HAVING

架构(MySQL v5.7)

CREATE TABLE T(
   Parent_Name VARCHAR(50),
  Child_Gender varchar(50)
);

INSERT INTO T VALUES('David','Male');
INSERT INTO T VALUES('Emma','Male');
INSERT INTO T VALUES('David','Female');
INSERT INTO T VALUES('David','Female');
INSERT INTO T VALUES('Tom','Female');
INSERT INTO T VALUES('N','Male');
INSERT INTO T VALUES('A','Male');
INSERT INTO T VALUES('K','Male');
INSERT INTO T VALUES('David','Female');
INSERT INTO T VALUES('Emma','Female');
INSERT INTO T VALUES('Emma','Female');
INSERT INTO T VALUES('Emma',null);
INSERT INTO T VALUES('J','Male');
INSERT INTO T VALUES('D','Male');
INSERT INTO T VALUES('Emma','Male');
Run Code Online (Sandbox Code Playgroud)

查询#1

Select
    Parent_Name
From Children  
GROUP BY
    Parent_Name
HAVING  
    COUNT(CASE WHEN Child_Gender='Male' THEN 1 END)>1
AND 
    COUNT(CASE WHEN Child_Gender='Female' THEN 1 END) > 1;

| Parent_Name |
| ----------- |
| Emma        |
Run Code Online (Sandbox Code Playgroud)

在 DB Fiddle 上查看