我是甲骨文新手,对MySQL有一点了解。我想使这一工作:
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“非一组表达”
简直快让我疯了。内部查询太大了,无法在这里显示,但是肯定有重复的,这就是我想用外部查询消除的。你能帮我解决我做错什么了吗?非常感谢!
发布于 2017-04-25 10:51:56
主要的问题是:你真正想要实现什么?
在内部查询中,按A1、A2、A3分组,这样就可以得到A1/A2/A3组合中的一行。所有这些列都在select列表中。因此,每一行都是不同的,因为它们都有不同的A1/A2/A3组合。一种方法是使用DISTINCT从结果中删除重复项,但是在您的示例中不可能像前面提到的那样存在重复项,因此DISTINCT在这里完全多余。
然后选择A4,但是当您按照A1、A2、A3分组时,通常需要决定您想要的是哪个A4。
最后,您再次按A1、A2、A3分组,这是完全多余的,因为数据已经按A1、A2、A3分组。您可以将每个组的一个A4值之和,这当然是值本身。
您可能只是想要A4和每A1,A2,A3,这将是
SELECT A1, A2, A3, SUM(A4) AS SA4
FROM T1
GROUP BY A1, A2, A3;但也许你完全想要别的东西。
发布于 2017-04-25 05:49:55
对于内部查询,确实需要组by,因此请执行以下操作
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发布于 2017-04-25 06:52:14
在内部查询中:
SELECT DISTINCT A1
, A2
, A3
, A4
FROM T1
GROUP BY A1, A2, A3您的A4既不是GROUP BY表达式的一部分,也不是聚合的一部分。这就是你的错误所在。
将查询更改为:
SELECT A1, A2, A3, SUM(A4) SA4
FROM (
SELECT DISTINCT A1, A2, A3, A4
FROM T1
) a
GROUP BY A1, A2, A3但是,您可以将这个(去掉内部查询)简化为:
SELECT A1, A2, A3, SUM(DISTINCT A4) SA4
FROM T1
GROUP BY A1, A2, A3https://stackoverflow.com/questions/43602566
复制相似问题