对于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获得了意想不到的令牌。我意识到这两个很可能是胡言乱语,这样做的正确方法是什么?
答案 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