0

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

我想减去

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 得到了意外的令牌。我意识到这两个很可能是胡言乱语,正确的做法是什么?

4

1 回答 1

0

您可以使用公用表表达式 (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
于 2013-04-29T03:55:02.373 回答