我有两张桌子。
第一个表是“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语句(带子查询)会是什么样的?
答案 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?