0

这是我的表:

AB 元组表 C 表具有 A.id、B.id、C.units 条目 D 表具有 C.id 条目 我想计算 D 表中具有相同 A 的 C.id 的所有条目.id 和 B.id 并从具有相同 A.id 和 B.id 的所有 C.units 的总和中减去该计数作为新列“差异”

所以我希望查询在一行中返回“差异”、常见的 A.id 和常见的 B.id

如果计数为 0,它也应该返回一个条目,并且“差异”将等于 sum(C.units)

例如

D table

D.id = 1, open=true, D.CID = 2
D.id = 2, open=true, D.CID = 3
D.id = 3, open=true, D.CID = 3
D.id = 4, open=true, D.CID = 4

C table

C.id = 2, A.id = 3, B.id = 5, units =4 
C.id = 3, A.id = 3, B.id = 5, units = 6
C.id = 4, A.id = 4, B.id = 6, units = 8
C.id = 5, A.id = 4, B.id = 6, units = 10

Bc D 中的前 3 个条目具有具有相同 AID 和 BID 的 CID,它们被计入同一个条目中。此外,具有相同 A.id 和 B.id 的 C 条目将其单位相加。即使 C 条目没有关联的 D 条目。因此,查询应返回以下 2 个条目:

1. difference = (6+4)-3 = 7    A.id = 3  B.id = 5
2. difference = (10+8)-1 = 17  A.id = 4  B.id = 6
4

1 回答 1

1

设置(你真的应该包括在你的问题中):

CREATE TABLE c
  (
    id int NOT NULL PRIMARY KEY,
    aid int NOT NULL,
    bid int NOT NULL,
    units int NOT NULL
  );
CREATE TABLE d
  (
    id int NOT NULL PRIMARY KEY,
    open boolean NOT NULL,
    cid int NOT NULL
  );
INSERT INTO c VALUES (2,3,5,4),(3,3,5,6),(4,4,6,8),(5,4,6,10),(6,7,8,9);
INSERT INTO d VALUES (1,true,2),(2,true,3),(3,true,3),(4,true,4);

这个问题有点难以理解,但我想你可能正在寻找这样的东西:

WITH n AS (
  SELECT aid, bid, count(*) AS cnt
    from c
    JOIN d ON (d.cid = c.id)
    GROUP BY aid, bid
)
SELECT aid, bid, sum(c.units) - COALESCE(n.cnt, 0) AS difference
  FROM c
  LEFT JOIN n USING (aid, bid)
  GROUP BY aid, bid, n.cnt
  ORDER BY aid, bid;

我得到这些结果:

援助| 出价 | 不同之处
-----+-----+------------
   3 | 5 | 7
   4 | 6 | 17
   7 | 8 | 9
(3 行)
于 2012-09-13T17:07:18.983 回答