Sql 找到大多数受监督人员的经理id

Sql 找到大多数受监督人员的经理id,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我无法在manager\u id下显示大多数人。答案是manager\u id=100,但我似乎无法生成显示它的sql。下面是创建并提供给我的两个表格 CREATE TABLE departments ( department_id NUMBER(4) , department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL , manager_id NUMBER(6) , lo

我无法在
manager\u id
下显示大多数人。答案是
manager\u id=100
,但我似乎无法生成显示它的sql。下面是创建并提供给我的两个表格

CREATE TABLE departments
    ( department_id    NUMBER(4)
    , department_name  VARCHAR2(30)
    CONSTRAINT  dept_name_nn  NOT NULL
    , manager_id       NUMBER(6)
    , location_id      NUMBER(4)
    ) ;

CREATE TABLE employees
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25)
     CONSTRAINT     emp_last_name_nn  NOT NULL
    , email          VARCHAR2(25)
    CONSTRAINT     emp_email_nn  NOT NULL
    , phone_number   VARCHAR2(20)
    , hire_date      DATE
    CONSTRAINT     emp_hire_date_nn  NOT NULL
    , job_id         VARCHAR2(10)
    CONSTRAINT     emp_job_nn  NOT NULL
    , salary         NUMBER(8,2)
    , commission_pct NUMBER(2,2)
    , manager_id     NUMBER(6)
    , department_id  NUMBER(4)
    , CONSTRAINT     emp_salary_min
                     CHECK (salary > 0) 
    , CONSTRAINT     emp_email_uk
                     UNIQUE (email)
    ) ;
下面是我的代码,我试图将两个表
employees
departments
合并在一起,以查找它们之间出现次数最多的
经理id


每次我尝试运行我的sql块时,它都会给我一个错误,比如
“ORA-00918:定义不明确的列”
,或者
限制1有问题

SELECT COUNT(Manager_id) into v_manager_id, 
FROM departments d
RIGHT JOIN employees e
ON d.manager_id = e.manager_id
GROUP BY Manager_id
ORDER BY COUNT(Manager_id) DESC
LIMIT 1;

您应该选择计数(员工id)。。。按经理分组\u id,以便显示某个经理下的所有员工的计数,然后检查该经理下的计数是否为最大值
否则就是别名或限定符问题,您应该将manager\u id命名为某个别名。

我认为您需要将限定符添加到
manager\u id
中,因为它出现在两个表中

SELECT COUNT(d.Manager_id) into v_manager_id, 
FROM departments d
RIGHT JOIN employees e
ON d.manager_id = e.manager_id
GROUP BY d.Manager_id
ORDER BY COUNT(d.Manager_id) DESC
LIMIT 1;
这将有助于:

select manager_id 
from (select manager_id,count(*)  
      from employees  
      group by manager_id 
      order by 
      count(*) desc)
where rownum<=1 ;
对于您的表,查询是:

select manager_id from employees group by manager_id
having count(*)=(select max(total) from (select count(*) as total from 
employees group by manager_id));

您发现
限制1
在哪里有效?“ORA-00918:列定义不明确提示…原因:联接中使用的列名存在于多个表中,因此被引用不明确。在联接中,出现在多个表中的任何列名在引用时都必须以其表名作为前缀。”@一匹没有名字的马自从Oracle接管MySQL以来,谷歌搜索Oracle语法变得很困难我喜欢用谷歌搜索堆栈溢出的含义|-(
1
2
select manager_id from employees group by manager_id
having count(*)=(select max(total) from (select count(*) as total from 
employees group by manager_id));