Sql 缺少右括号的oracle订单

Sql 缺少右括号的oracle订单,sql,oracle,Sql,Oracle,我需要找到不同员工的最大数量 所以我的代码是: select ProjName from Project where ProjId in ( select ProjId from EmpProject order by count(ProjId) desc group by ProjId where rownum<=1 ); 但它抛出一个错误,表示缺少右括号。 有人能告诉我如何解决这个问题吗?你的语法不正确。order by子句位于末尾,where位于group by之前。因此,您的查

我需要找到不同员工的最大数量 所以我的代码是:

select ProjName from Project where ProjId in (
select ProjId from EmpProject 
order by count(ProjId) desc
group by ProjId
where rownum<=1
);
但它抛出一个错误,表示缺少右括号。
有人能告诉我如何解决这个问题吗?

你的语法不正确。order by子句位于末尾,where位于group by之前。因此,您的查询变成:

SELECT ProjName
FROM Project
WHERE ProjId IN
  (SELECT ProjId
  FROM EmpProject
  WHERE rownum<=1
  GROUP BY ProjId
  ORDER BY COUNT(ProjId) DESC
  );

如果要查找分配给该项目的员工人数最多的项目,还可以使用窗口函数和聚合的组合。这将适用于自Oracle 10甚至Oracle 9以来的任何产品

select p.projname
from project p
  join (
    select projid, 
           row_number() over (order by count(*) desc) as rn
    from empproject
    group by projid
  ) t on t.projid = p.projid and t.rn = 1

您的需求只是说明了不同员工的最大数量——它没有说明返回具有最大员工数量的项目的projectID。这意味着查询应该只返回一个数字,而不返回其他内容

假设您的EmpProject显示empID和projID,其中员工被分配到了哪个项目,并且假设可能存在重复项,不清楚为什么会有重复项,但您要求不同的员工,就好像可以有重复项一样-您可以这样做。使用SCOTT模式中的标准EMP表进行说明,因为您没有提供测试数据;将表和列名替换为EmpProject、empID和projID,以便在表中使用它

select   max( count(distinct empno) ) as max_employees
from     emp
group by deptno
;

MAX_EMPLOYEES
-------------
6

您的子查询有许多语法错误。您尝试的查询与计数员工的尝试没有什么相似之处。单独查找不同员工的最大数量是没有意义的。你的意思是,找到拥有最多不同员工的东西。请解释你自己。缩进和代码格式的重要性。现在我不知道您的意图是什么,因为您没有缩进子查询。您显然不熟悉SELECT语句子句的顺序规则。所以你的右括号可能是你想要的;在这种情况下,子查询是不正确的。您收到一个错误,因为GROUP BY无法跟随ORDER BY。所以在这之前你需要一个右括号。当然,您的查询仍然无法编译。至少要努力格式化您的查询,使其明确您的意图。描述不同员工的最大数量似乎与您的查询匹配。请回答您的问题,并添加一些示例数据和基于该数据的预期输出。请问,您是否也需要退回项目,或者只是退回最大数量的员工?如果需要返回projectID,那么当有两个或多个项目具有相同数量的不同员工,并且该数量在所有项目中是最大的时,所需的输出是什么?你想从员工人数最多的项目中随机抽取一个,还是想知道所有的项目ID?非常感谢!如果两个或两个以上的项目拥有最多的员工数量,那么将返回所有拥有最多员工数量的项目,而不仅仅是其中的一个项目。
select p.projname
from project p
  join (
    select projid, 
           row_number() over (order by count(*) desc) as rn
    from empproject
    group by projid
  ) t on t.projid = p.projid and t.rn = 1
select   max( count(distinct empno) ) as max_employees
from     emp
group by deptno
;

MAX_EMPLOYEES
-------------
6