有人可以帮我理解为什么这会产生SQL错误

时间:2018-08-07 23:43:29

标签: sql oracle-sqldeveloper

SELECT lastname, firstname, COUNT(orderid)
FROM customers JOIN orders USING (customerid)
GROUP BY customerid;

我很难理解为什么我会得到SQL Error: ORA-00979: not a GROUP BY expression的问题,当我用此列单独执行count函数时,它仍然可以查找,即使我在select语句中使用了另一个pk也可以,但是可惜现在无法正常工作,我可以借助一些协助找出原因。

2 个答案:

答案 0 :(得分:4)

您需要在select clause中拥有group by的所有非聚合列,如下所示。

SELECT customerid,lastname, firstname, COUNT(orderid)
FROM customers JOIN orders USING (customerid)
GROUP BY customerid,lastname, firstname; -- all non-aggregate columns

或者在输出中没有CustomerId。

SELECT lastname, firstname, COUNT(orderid)
FROM customers JOIN orders USING (customerid)
GROUP BY lastname, firstname; -- all non-aggregate columns

答案 1 :(得分:4)

Group by syntax

当您使用group by子句时,您的select子句只能在group by子句或某些聚合函数中包含列。它应该看起来像这样:

SELECT lastname, firstname, COUNT(orderid)
FROM customers JOIN orders USING (customerid)
GROUP BY lastname, firstname;

从概念上讲,没有一个不是按列分组或聚合函数的列是没有意义的。在示例查询中,当您为每个customerid生成一个汇总行时,“ lastname”或“ firstname”实际上意味着什么?每个customerid可以具有多个与之关联的名称,并且您的查询未指定如何将它们组合成一行。