如何用MySQL查询容纳至少两种不同类型动物的笼子编号
解决方法
要找出容纳至少两种不同类型动物的笼子编号,核心逻辑是按笼子编号分组,统计每个笼子内的动物类型数量,筛选出类型数量≥2的笼子。具体SQL语句如下:
SELECT a.cNum FROM TheAnimals a GROUP BY a.cNum HAVING COUNT(DISTINCT a.Type) >= 2;
如果需要确保结果仅包含theCages表中存在的有效笼子编号,可以关联theCages表:
SELECT DISTINCT a.cNum FROM TheAnimals a JOIN theCages c ON a.cNum = c.cNum GROUP BY a.cNum HAVING COUNT(DISTINCT a.Type) >= 2;
逻辑说明
GROUP BY a.cNum:按笼子编号分组,将同一个笼子里的动物归为一组COUNT(DISTINCT a.Type):统计每组内不同动物类型的数量(用DISTINCT避免重复类型被多次计数)HAVING COUNT(DISTINCT a.Type) >= 2:筛选出包含至少两种不同类型动物的笼子
结合你提供的数据,所有笼子中的动物都只有单一类型:
- cNum=11:仅包含Leopard类型
- cNum=12:仅包含Lion类型
- cNum=1:仅包含Bear类型
- cNum=3:仅包含Magpie类型
因此执行上述语句会返回空结果,符合预期。
对比你之前的查询
你之前的查询是按动物类型分组,找出对应类型有至少2只动物的笼子,这和需求中“笼子内有至少两种不同类型动物”的逻辑完全不同,所以得到的cNum=11仅代表该笼子里有2只同类型的Leopard,并非符合要求的结果。
内容的提问来源于stack exchange,提问作者shin gamma
相关产品推荐
相关产品推荐

