【问题标题】:Subtracting the result of one query from that of another in DB2在 DB2 中从另一个查询的结果中减去一个查询的结果
【发布时间】:2013-04-29 12:02:09
【问题描述】:

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

我要减法

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

【问题讨论】:

  • 您的第一个查询是正确的,我已经检查过了,请您发布哪个错误 db2 返回。出于测试目的,我检查了您在 SQL Server 中的第一个查询。
  • 感谢您的检查! DB2 => SELECT (SELECT AVG(gehalt) FROM mitarbeiter) - (SELECT AVG(gehalt) FROM mitarbeiter WHERE personalnummer IN (SELECT personalnummer FROM zertifiziert)) SQL0104N Auf "FROM zertifiziert))" folgte das unerwartete Token "END-OF-STATEMENT". Zu den möglichen Token gehören: "<table_expr>". SQLSTATE=42601 是德语,但我认为它明白了
  • SQL0104N Auf "FROM zertifiziert))" ?
  • 这是什么?这是查询的一部分吗?
  • 是的,查询到此结束。它基本上说“在'...zertifiziert))'之后有意外的令牌“END-OF-STATEMENT”。可能的令牌是''。SQLSTATE=42601"

标签: sql database db2


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2019-11-20
    • 2021-02-22
    • 2014-08-18
    • 2016-04-06
    相关资源
    最近更新 更多