基于EMPLOYEE与DEPARTMENT模式,用GROUP BY编写指定SQL查询
解决方案
首先,我们需要关联员工表与部门表,同时按部门分组来统计符合条件的数据。以下是满足需求的SQL语句:
SELECT d.dname AS 部门名称, COUNT(CASE WHEN e.age > 25 THEN 1 END) AS 超25岁员工人数 FROM EMPLOYEE e JOIN DEPARTMENT d ON e.dno = d.dnum GROUP BY d.dnum, d.dname HAVING COUNT(*) > 2;
语句说明:
- 表关联:通过外键
dno与主键dnum关联两张表,确保能获取到部门的名称信息。 - 分组规则:按部门编号
dnum和名称dname分组,保证每个部门作为独立统计单元(dnum是主键,对应唯一dname,同时分组两者是为了在SELECT中直接引用部门名称)。 - 分组过滤:
COUNT(*) > 2用来筛选总员工数超过2人的部门,COUNT(*)统计的是每个分组下的所有员工数量。 - 超龄员工统计:
COUNT(CASE WHEN e.age > 25 THEN 1 END)会对每个员工判断年龄是否达标,符合条件的返回1,否则返回NULL;COUNT函数会忽略NULL值,最终得到该部门中年龄超25岁的员工总数。
内容的提问来源于stack exchange,提问作者David Lin
相关产品推荐
相关产品推荐

