我想使用简单的count(*)
代码,但有些问题。
select fname,lname, dno, count(*) from employee group by dno having count(*);
我收到以下错误:
非常感谢你!第4行的错误:ORA-00920:无效的关系运算符
答案 0 :(得分:2)
对于要执行的组操作,您需要在group by子句中提及列名。
所以对你的最终查询是:
select fname,lname, dno, count(*) from employee group by dno,fname,lname;
希望这会有所帮助。 :)
答案 1 :(得分:1)
此查询有两个问题: 1.无效使用分组运算符 2. 有子句中的语法错误。
对于要使用的第1步: 分组依据子句,请确保您在select语句中提到的group by子句中包含所有列。 这种方式的最大缺点是,这个分组使子组和使用像 count(*)这样的函数变得毫无意义。
ex-如果你总共有10条记录,其中2条唯一记录在" dno "和" lname "是完全独特的(实际上很明显)。然后使用group by dno,lname将创建总共10个组, count(*)将为每个组返回1,1,1值。为了使查询运行,丢失组的实际需要。
所以要小心。
对于第2步:正确的语法是计数()> 1或计数()= 2或任何您想要的但是完成它。
为了保留您的逻辑要求,您可以使用如下的分析函数:
select e1.fname,e1.lname,e1.dno from
(select fname,lname, dno, count(*) over (partition by dno) as cnt
from employee) e1
where e1.cnt>1;
上述查询中的e.cnt> 1 是我的假设。根据您的需要使用它。
答案 2 :(得分:0)
不需要"有"
select fname,lname, dno, count(*) from employee group by dno;
答案 3 :(得分:0)
你应该有一个having
子句的表达式。
尝试
select fname,lname, dno, count(*) from employee group by dno having count(*) > 0;
我认为@Timur是对的,你甚至不需要having clause
,group by
就足够了
答案 4 :(得分:0)
select fname,lname, dno, count(*)
from employee
group by dno,fname,lname;
答案 5 :(得分:0)
通过fname,lname从员工组中选择fname,lname,dno,count(1), dno有count(1)> = 1;