首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle11g组

Oracle11g组
EN

Stack Overflow用户
提问于 2017-04-25 05:46:22
回答 4查看 335关注 0票数 0

我是甲骨文新手,对MySQL有一点了解。我想使这一工作:

代码语言:javascript
复制
SELECT A1, A2, A3, SUM(A4) SA4
FROM (
SELECT A1
    , A2
    , A3
    , A4
FROM T1
GROUP BY A1, A2, A3, A4, A5, A6, A7, A9, A10, A11, A12 ...
) a
GROUP BY A1, A2, A3

我很确定它会在MySQL中工作,但在Oracle中,我得到了以下错误:

ORA-00979“非一组表达”

简直快让我疯了。内部查询太大了,无法在这里显示,但是肯定有重复的,这就是我想用外部查询消除的。你能帮我解决我做错什么了吗?非常感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-25 10:51:56

主要的问题是:你真正想要实现什么?

在内部查询中,按A1、A2、A3分组,这样就可以得到A1/A2/A3组合中的一行。所有这些列都在select列表中。因此,每一行都是不同的,因为它们都有不同的A1/A2/A3组合。一种方法是使用DISTINCT从结果中删除重复项,但是在您的示例中不可能像前面提到的那样存在重复项,因此DISTINCT在这里完全多余。

然后选择A4,但是当您按照A1、A2、A3分组时,通常需要决定您想要的是哪个A4。

  • 如果A4依赖于A1、A2、A3或其中的组合(例如雇员号上的雇员名称,即由其编号标识的员工只有一个名称),则我们讨论的是one A4,根据SQL标准查询将是有效的。MySQL让我们这样编写查询,但不幸的是,Oracle仍然坚持为组指定您想要的A4。如果只有一个,您可以在这里使用MIN(A4)或MAX(A4)来满足甲骨文的要求。
  • 但是,如果A4不依赖于A1、A2、A3或其中的组合(例如员工号不依赖于部门,因为每个部门存在多个员工),则查询无效。MySQL,但是用于允许这个查询,并且返回任意选择的A4 (就像任意为部门挑选一个员工一样)。这常常导致初学者编写不正确的查询。

最后,您再次按A1、A2、A3分组,这是完全多余的,因为数据已经按A1、A2、A3分组。您可以将每个组的一个A4值之和,这当然是值本身。

您可能只是想要A4和每A1,A2,A3,这将是

代码语言:javascript
复制
SELECT A1, A2, A3, SUM(A4) AS SA4
FROM T1
GROUP BY A1, A2, A3;

但也许你完全想要别的东西。

票数 0
EN

Stack Overflow用户

发布于 2017-04-25 05:49:55

对于内部查询,确实需要组by,因此请执行以下操作

代码语言:javascript
复制
    SELECT a1,
         a2,
         a3,
         SUM (a4) sa4
    FROM (SELECT DISTINCT NULL a1,
                          NULL a2,
                          NULL a3,
                          NULL a4
            FROM t1) a
GROUP BY a1, a2, a3
票数 0
EN

Stack Overflow用户

发布于 2017-04-25 06:52:14

在内部查询中:

代码语言:javascript
复制
SELECT DISTINCT A1
    , A2
    , A3
    , A4
FROM T1
GROUP BY A1, A2, A3

您的A4既不是GROUP BY表达式的一部分,也不是聚合的一部分。这就是你的错误所在。

将查询更改为:

代码语言:javascript
复制
SELECT A1, A2, A3, SUM(A4) SA4
FROM (
  SELECT DISTINCT A1, A2, A3, A4
  FROM   T1
) a
GROUP BY A1, A2, A3

但是,您可以将这个(去掉内部查询)简化为:

代码语言:javascript
复制
SELECT A1, A2, A3, SUM(DISTINCT A4) SA4
FROM   T1
GROUP BY A1, A2, A3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43602566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档