【问题标题】:SQL - count (*) not workingSQL - 计数 (*) 不起作用
【发布时间】:2017-05-01 10:15:04
【问题描述】:

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

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

我收到以下错误:

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

非常感谢!!

【问题讨论】:

  • 在提出关于 SO 的问题之前,请尝试阅读有关您使用的结构的信息,此类问题通常会出现细微的语法错误。

标签: sql oracle count


【解决方案1】:

对于要执行的分组操作,您需要在 group by 子句中提及列名。

所以你的最终查询是:

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

希望这会有所帮助。 :)

【讨论】:

    【解决方案2】:

    这个查询有两个问题: 1. group by 运算符的使用无效 2. have子句语法错误。

    对于第 1 步: Group by 子句,请确保您在 select 语句中提到的 group by 子句中的所有列。 这种方式最大的缺点是,这种分组会产生子组,使用count(*)之类的函数变得毫无意义。

    ex- 如果您总共有 10 条记录,其中“dno”和“lname”中的 2 条唯一记录是完全唯一的(这在实践中很明显)。然后使用 group by dno,lname 将创建总共 10 个组,count(*) 将为每个组返回 1,1,1 值。只是为了使查询运行而丢失了 group by 的实际需求。

    所以要小心。

    对于第 2 步:正确的语法是 count()>1 或 count()=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 是我的假设。根据您的需要使用它。

    【讨论】:

      【解决方案3】:

      不需要“拥有”

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

      【讨论】:

      • 不确定这是否被投票,它不是有效的 Oracle 语法
      【解决方案4】:

      你应该有一个having 子句的表达式。

      试试

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

      另外我认为@Timur 是对的,你甚至不需要having clausegroup by 就足够了

      【讨论】:

      • 如果我尝试按 dno 从员工组中选择 fname、lname、dno、count(*);它在第 1 行仍然有一个错误 ERROR: ORA-00979: not a GROUP BY expression
      【解决方案5】:
      select fname,lname, dno, count(*) 
      from employee 
      group by dno,fname,lname;
      

      【讨论】:

        【解决方案6】:

        你错过了 group by 中的几个列名,也应该有关系运算符。 请尝试

        select fname,lname, dno, count(1) from employee group by fname,lname, dno 有 count(1)>=1;

        【讨论】:

          猜你喜欢
          • 2011-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-03
          • 1970-01-01
          • 2014-08-25
          • 2010-11-05
          相关资源
          最近更新 更多