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));