【问题标题】:Group by on single column is not working [duplicate]单列分组不起作用[重复]
【发布时间】:2014-03-29 12:52:04
【问题描述】:

当我使用以下查询时,它可以工作:

select d.id, 
       d.name, 
       count(e.id) as numberofemployees
  from department d, 
       employee1 e
 where d.id=e.deptid
group by d.id, 
         d.name
order by d.id; 

但是当我使用以下查询时,它给了我错误:

select d.id, 
       d.name, 
       count(e.id) as numberofemployees
  from department d, 
       employee1 e
 where d.id=e.deptid
group by d.id 
order by d.id; 

错误如下:

选择 d.id、d.name、count(e.id) 作为 numberofemployees

第 1 行出现错误:ORA-00979:不是 GROUP BY 表达式

我不明白问题出在哪里。我认为单列分组应该没问题。 任何帮助将不胜感激。

【问题讨论】:

  • 只是我的问题还是那些查询相同?
  • 这两个查询实际上没有区别。您是否复制并粘贴了错误的查询以用于不工作的查询?
  • 您犯了一个错误并粘贴了两次相同的查询。产生该错误的那个必须是不同的;您包含的任何一个都不会导致出现该错误。
  • 抱歉输入错误。现在我更新了 Q

标签: sql oracle


【解决方案1】:

在第二个查询中,列 name 不在 group by 子句中,这会导致您的错误。

所以下面的查询会产生一个结果:

select d.id,
       count(e.id) as numberofemployees
  from department d, 
       employee1 e
 where d.id=e.deptid
group by d.id
order by d.id; 

Ken White 的回答很好地解释了为什么会这样。

【讨论】:

    【解决方案2】:

    在大多数 DBMS 实现中,GROUP BY 必须包含未出现在聚合函数中的每一列(AVG()SUM()COUNT() 等)。如果您有两列(ID 和名称)不在聚合函数中,则必须在 GROUP BY 子句中列出它们。

    【讨论】:

    • 赞成,不知道为什么这被反对了。似乎是明显的正确答案,即使 OP 发布了不正确的错误查询。
    • @Tobberoth:我也是。除了 MySQL(可能还有其他几个)之外,对于我熟悉的每个 DBMS(尤其是 Oracle)都是如此。谢谢。 :-)
    • 为什么我的回答被否决了?这也是真的。 cry cry :P 顺便说一句,为很好的解释点赞。
    • @Fabian:你为什么问我?我没有投反对票,我不知道为什么有人这样做。
    • @KenWhite 我的查询employee1 和department 中有两张表。我在聚合函数中使用 e.id。您说“GROUP BY 必须包括未出现在聚合函数中的每一列”,但是哪个表employee1 或部门的每一列?
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2018-09-24
    • 1970-01-01
    • 2022-11-21
    • 2018-03-27
    相关资源
    最近更新 更多