You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保Number列值大于1?已尝试HAVING子句但结果异常

嘿,我来帮你看看这个问题~

你想筛选出技能数量大于1的员工,但加了HAVING Number>1后结果不对,只返回1行,大概率是你的SQL结构或者统计逻辑有问题,我们一步步来拆解:

首先看你原来的SQL,其实子查询是多余的——你在子查询里拉了Skill的字段,但外层查询根本没用到这些字段,反而可能因为RIGHT JOIN引入了不必要的记录(比如EmployeeSkill里关联了Skill表中不存在的SkillID,这些记录的Skill字段会是NULL,但依然会被COUNT(*)统计进去)。

给你几个针对性的解决方案:

方案1:直接统计员工的技能关联数(包含所有关联记录)

如果你的需求是只要员工在EmployeeSkill表中有超过1条记录(不管Skill是否存在),可以直接简化SQL,不需要子查询:

SELECT EmployeeSkill.EmployeeID, COUNT(*) AS "Number"
FROM EmployeeSkill
GROUP BY EmployeeSkill.EmployeeID
HAVING COUNT(*) > 1;

方案2:统计员工拥有的有效技能数(仅Skill表中存在的技能)

如果你只想统计Skill表中存在的技能数量,那应该用INNER JOIN而不是RIGHT JOIN,这样只会保留有对应Skill的关联记录:

SELECT EmployeeSkill.EmployeeID, COUNT(*) AS "Number"
FROM Skill
INNER JOIN EmployeeSkill ON EmployeeSkill.SkillID = Skill.SkillID
GROUP BY EmployeeSkill.EmployeeID
HAVING COUNT(*) > 1;

方案3:去重统计不同技能数(避免重复关联的影响)

如果EmployeeSkill表中存在同一个员工重复关联同一个SkillID的情况(比如误操作添加了多次),可以用COUNT(DISTINCT Skill.SkillID)来统计不同的技能数量:

SELECT EmployeeSkill.EmployeeID, COUNT(DISTINCT Skill.SkillID) AS "Number"
FROM Skill
INNER JOIN EmployeeSkill ON EmployeeSkill.SkillID = Skill.SkillID
GROUP BY EmployeeSkill.EmployeeID
HAVING COUNT(DISTINCT Skill.SkillID) > 1;

你可以根据自己的实际需求选择对应的方案,应该就能解决只返回1行的问题啦~

内容的提问来源于stack exchange,提问作者ratdog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:50:24