DB2如何在Join中使用SUM函数

时间:2011-12-12 16:37:33

标签: sql join db2 sum

DB2 info:z / OS v9.1

我正在尝试创建一个查询,从不同的表中选择不同的列,其中一个表列我需要总和。例如:

    SELECT A.column1, B.*, SUM(C.Colum3) as col3
    FROM schema.TableA A, schema.TableB B, schema.TableC C
    WHERE A.column2 = B.column2 AND A.column1 = C.column1 
    GROUP BY A.column1;

查询不起作用。我收到一个错误:

    COLUMN OR EXPRESSION IN THE SELECT LIST IS NOT VALID.

我尝试了不同的查询示例,例如How can I sum a group of sums? SQL Server 2008

它在sql server中,这可能是它无法正常工作的原因。 DB2没有很多例子。 :(

1 个答案:

答案 0 :(得分:1)

因为你在SQL Server和其他所有主要的RDBMS中都会得到同样的错误(这里不包括MySQL的怪癖):你有GROUP BY子句中没有包含的列,或者是聚合的一部分,所以系统不知道如何处理它们(MySQL会为这些列返回一个随机行,我想,可能不是你想要的)。

目前还不清楚你想要得到的“总和”是什么,因为你只列出了一个SUM()。假设TableC是您需要聚合的唯一表,请使用公用表表达式(CTE),如下所示:

WITH Summed_TableC (column1, summedColumn) as (SELECT column1, SUM(column3)
                                               FROM TableC
                                               GROUP BY column1)
SELECT a.Column1, b.*, c.summedColumn
FROM schema.TableA as a
JOIN schema.TableB as b
ON b.column2 = a.column2
JOIN Summed_TableC as c
ON c.column1 = a.column1

哦 - 永远不要使用隐式连接语法。您已经很好地确定了哪些列来自哪些表,但如果不这样,那只会让人感到困惑。通过明确JOIN表及其列来避免这种情况。