在一次采访中,我被要求找出每种性别至少有一个孩子的父母的姓名,即至少 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)
您能帮忙解答一下第二个问题吗?
您可以尝试使用条件聚合函数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)