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

单表查询方法?员工表中下属≤6人的经理关联员工信息查询

Hey there! Let's break down your questions one by one:

问题解答

1. 如何进行单表查询?

单表查询是SQL里最基础的操作,核心靠SELECT语句搭配不同子句来精准获取数据,基本结构如下:

SELECT [字段1, 字段2, ... | *]
FROM 表名
[WHERE 筛选条件]
[GROUP BY 分组字段]
[HAVING 分组后筛选条件]
[ORDER BY 排序字段 [ASC|DESC]]

给你几个实用示例:

  • 查询表中所有字段:
    SELECT * FROM 表名;
    
  • 查询特定字段并添加筛选条件:
    SELECT EmployeeName, FirstName FROM Employee WHERE EmployeeID > 100;
    
  • 对查询结果按指定字段排序:
    SELECT EmployeeName, ManagerName FROM Employee ORDER BY EmployeeName ASC;
    

2. 针对Employee表的特定查询需求

要实现「查询FirstName、EmployeeName、ManagerName字段,且筛选出下属≤6人的经理对应的员工信息」,可以通过统计经理下属数量再关联原表的方式完成,这里提供两种常用写法:

方法一:子查询+JOIN

先统计每个经理的下属数,再和原表关联筛选:

SELECT e.FirstName, e.EmployeeName, e.ManagerName
FROM Employee e
JOIN (
    -- 统计每个经理的下属数量,筛选出下属≤6人的经理
    SELECT ManagerID, COUNT(*) AS SubordinateCount
    FROM Employee
    WHERE ManagerID IS NOT NULL  -- 排除无上级的员工(如最高管理层)
    GROUP BY ManagerID
    HAVING COUNT(*) <= 6
) m ON e.ManagerID = m.ManagerID;

方法二:窗口函数(更简洁)

如果你的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、SQL Server等),可以直接用窗口函数计算下属数后筛选:

SELECT FirstName, EmployeeName, ManagerName
FROM (
    SELECT 
        FirstName, 
        EmployeeName, 
        ManagerName,
        COUNT(*) OVER (PARTITION BY ManagerID) AS SubordinateCount
    FROM Employee
    WHERE ManagerID IS NOT NULL
) temp
WHERE SubordinateCount <= 6;

说明:

  • 我们排除了ManagerID IS NULL的记录,因为这类员工没有上级,不属于任何经理的下属;
  • 两种方法都能满足需求,你可以根据自己使用的数据库版本选择合适的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:41:26