在DB2中从一个查询的结果中减去一个查询的结果

时间:2013-04-29 03:03:49

标签: sql database db2

对于School,我需要从所有这些值的平均值中减去表中特定条目子集的平均值:

我想减去

SELECT AVG(gehalt) FROM mitarbeiter WHERE personalnummer IN (SELECT personalnummer FROM zertifiziert)

SELECT AVG(gehalt) FROM mitarbeiter

单独这些陈述有效,但我试图减去它们

SELECT (SELECT AVG(gehalt) FROM mitarbeiter) - (SELECT AVG(gehalt) FROM mitarbeiter WHERE personalnummer IN (SELECT personalnummer FROM zertifiziert))

SELECT mige-pige AS differenz FROM ((SELECT SUM(gehalt) AS mige FROM mitarbeiter) UNION (SELECT SUM(gehalt) AS pige FROM mitarbeiter WHERE personalnummer IN (SELECT personalnummer FROM zertifiziert)))

没有,DB2获得了意想不到的令牌。我意识到这两个很可能是胡言乱语,这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用Common Table Expression (CTE)来首先计算平均值,然后在常规查询中使用它(CTE基本上是内联视图):

WITH subset (average) AS (
    SELECT AVG(gehalt)
    FROM mitarbeiter 
    WHERE personalnummer IN (
        SELECT personalnummer
        FROM zertifiziert
    )
)

SELECT AVG(gehalt) - (SELECT average FROM subset)
FROM mitarbeiter

此外,我认为您的第一个查询可行,但您没有表引用。与SQL Server(您可以执行SELECT CURRENT_USER)或MySQL之类的操作不同,您始终必须具有对表的引用。在这种情况下,它是SYSIBM.SYSDUMMY1表:

SELECT (SELECT AVG(gehalt) FROM mitarbeiter)
 - (SELECT AVG(gehalt) 
    FROM mitarbeiter 
    WHERE personalnummer IN (
        SELECT personalnummer 
        FROM zertifiziert))
FROM sysibm.sysdummy1