【问题标题】:List all bosses who have at least 3 staff members列出所有拥有至少 3 名员工的老板
【发布时间】:2012-02-22 09:12:01
【问题描述】:

如何查询下表得到所有老板的名字(即boss_id = staff_id) 谁有至少 3 名员工?我要使用havinggroup by、...吗?

    CREATE TABLE STAFF (STAFF_ID                    CHAR(3),
                        STAFF_NAME              CHAR(20),
                        GENDER                  CHAR(6),
                        DEPARTMENT              CHAR(20),
                        BOSS_ID                 CHAR(3)
                        SALARY                  NUMBER(8,2))

谢谢!

【问题讨论】:

标签: sql group-by having


【解决方案1】:

我使用COUNT(*)>3 是因为我假设您的意思是除了老板本人之外的 3 名员工。

SELECT a.staff_name
FROM staff a
INNER JOIN (
  SELECT boss_id,COUNT(*) AS cnt_staff FROM staff GROUP BY boss_id HAVING COUNT(*)>3
) b ON a.boss_id=b.boss_id
WHERE a.staff_id=a.boss_id

【讨论】:

    【解决方案2】:
    select S.Boss_ID, X.STAFF_NAME
    from STAFF S cross apply (Select staff_name from STAFF S2 where S2.staff_id=S.boss_ID) X
    group by S.Boss_ID, X.STAFF_NAME
    having count(*)>=3
    

    【讨论】:

      【解决方案3】:
      select boss_id, staff_name 
      from staff 
      group by boss_id, staff_name 
      having count(staff_id)>=3
      

      【讨论】:

      • 它在结果集中的第 2 位。如果你只想要staff_name,只需在select 和group by 中省略boss_id。那么staff_name 是你唯一的结果。
      • 但是如果我在寻找老板的名字的情况下,我可以这样做:从员工中选择 STAFF_ID,其中 STAFF_ID = BOSS_ID group by BOSS_ID with count(STAFF_ID)>=3
      • @user1225281 不,这是不可能的
      猜你喜欢
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      相关资源
      最近更新 更多