我的表格如下所示。
Table1
Field1 Field2
ID111 1,500
ID112 100
ID111 250
ID114 50
ID114 20
Table2
Field1 Field3
ID111 Chris
ID112 Mary
ID114 John
我想要的是下面显示的结果。
ID111 Chris 1,750
ID112 Mary 100
ID114 John 70
我已经通过使用2个sql执行实现了这一点。感谢那些昨晚在这个网站上提供帮助的人,我只使用1个sql语句就可以使用它。但是,我无法将第一个表链接到第二个表以获取更多信息。
使用
SELECT SUM(ctotal) AS TransactionTotal
FROM table1
GROUP BY field1
我能够实现
ID111 1,750
ID112 100
ID114 70
我目前正在使用此sql语句,它会弹出错误。
SELECT SUM(ctotal) AS TransactionTotal,
table2.field3
FROM table1
INNER JOIN table2
ON table1.field1 = table2.field1
GROUP BY table1.field1
它说不能“你试图执行一个不包含指定表达式'Field3'的查询作为聚合函数的一部分。”
如果有人知道解决这个问题,我会非常感激。
答案 0 :(得分:2)
这应该足够了 -
SELECT t1.firld1, t2.field3,
sum(t1.CTotal) as cTotal
FROM table1 t1 INNER JOIN table2 t2
ON t1.field1 = t2.field1
GROUP BY t1.field1, t2.field3
您在SELECT
语句中选择的不是聚合函数的列(即,未使用COUNT
,SUM
或其他聚合函数的列)也应该是在GROUP BY
条款中提到。
在MySQL中并没有特别遵循这一点(有时会产生不必要的结果),但在Oracle中它是强制性的。但是,当您使用上述查询时,大多数RDBMS将产生类似的结果。
答案 1 :(得分:1)
正如Blorgbear和Matt Welch所说,你需要包括所有不属于聚合函数的列。
这样做的原因是你试图告诉它总和一个值,而不是把它放在其他列中。
考虑一下其他两列中的数据,如果你没有指定对它的操作,如Min(拉动最小值),它如何知道显示100,250或Field2的任何其他值
答案 2 :(得分:0)
您需要group by
select
中包含的列:
Select SUM(CTotal) as TransactionTotal, Table2.Field3
from Table1
INNER JOIN Table2 ON Table1.Field1=Table2.Field1
GROUP BY Table1.Field3
答案 3 :(得分:0)
将Field3添加到GROUP BY子句中,如下所示:
Select SUM(CTotal) as TransactionTotal, Table2.Field3 from Table1
INNER JOIN Table2 ON Table1.Field1=Table2.Field1 GROUP BY Table2.Field3
答案 4 :(得分:0)
试试这个
Select SUM(CTotal) as TransactionTotal, max(Table2.Field3) Field3 from Table1
INNER JOIN Table2 ON Table1.Field1=Table2.Field1 GROUP BY Table1.Field1
或
Select SUM(CTotal) as TransactionTotal, Table2.Field3 from Table1
INNER JOIN Table2 ON Table1.Field1=Table2.Field1 GROUP BY Table1.Field1, Table2.Field3