SQL内部加入Group By

时间:2013-12-12 02:38:24

标签: sql group-by sum inner-join

我的表格如下所示。

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'的查询作为聚合函数的一部分。”

如果有人知道解决这个问题,我会非常感激。

5 个答案:

答案 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语句中选择的不是聚合函数的列(即,未使用COUNTSUM或其他聚合函数的列)也应该是在GROUP BY条款中提到。

在MySQL中并没有特别遵循这一点(有时会产生不必要的结果),但在Oracle中它是强制性的。但是,当您使用上述查询时,大多数RDBMS将产生类似的结果。

答案 1 :(得分:1)

正如Blorgbear和Matt Welch所说,你需要包括所有不属于聚合函数的列。

这样做的原因是你试图告诉它总和一个值,而不是把它放在其他列中。

考虑一下其他两列中的数据,如果你没有指定对它的操作,如Min(拉动最小值),它如何知道显示100,250或Field2的任何其他值

以下是聚合函数列表: http://www.w3schools.com/sql/sql_functions.asp

答案 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