SQL - count(*)不起作用

时间:2017-05-01 10:15:04

标签: sql oracle count

我想使用简单的count(*)代码,但有些问题。

select fname,lname, dno, count(*) from employee group by dno having count(*);

我收到以下错误:

  

第4行的错误:ORA-00920:无效的关系运算符

非常感谢你!

6 个答案:

答案 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 clausegroup 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;