Oracle SQL Left加入除“join on”字段以外的sum和字段

时间:2012-10-11 23:11:39

标签: sql oracle group-by

我有两张桌子。

第一个表是“a”,字段为a.pr,a.info和a.id.第二个表是“b”,字段为b.id和b.amount。

a.id = b.id,但多个b.id可能与单个a.id匹配。

我的SQL语句如下:

SELECT a.pr, a.info, a.id, SUM(b.amount) AS total
FROM   a 
LEFT JOIN b ON a.id=b.id
WHERE  a.pr = "549"
GROUP BY a.id

现在,这不起作用。它抛出“不是GROUP BY表达式”错误。据我了解,我需要一个子查询,但我找到的所有例子似乎都与我在这里想要完成的完全匹配,我无法让它们中的任何一个正常工作。

在这种情况下,完整的SQL语句(带子查询)会是什么样的?

2 个答案:

答案 0 :(得分:1)

您应该按照select子句中的所有字段进行分组:

SELECT a.pr, a.info, a.id, SUM(b.amount) AS total
FROM   a 
LEFT JOIN b ON a.id=b.id
WHERE  a.pr = "549"
GROUP BY a.pr, a.info, a.id

请参阅ORA-00979

答案 1 :(得分:0)

正如Ryan所指出的那样,所有没有聚合函数的列都需要成为group by子句的一部分

此链接提供了一个很好的解释 But WHY Must That Column Be Contained in an Aggregate Function or the GROUP BY clause?