Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql(对我来说)很难查询_Postgresql_Associations - Fatal编程技术网

postgresql(对我来说)很难查询

postgresql(对我来说)很难查询,postgresql,associations,Postgresql,Associations,以下是我的表格: 元组表 具有A.id和B.id项的C表 具有C.id和布尔字段“open”的条目的D表 我想统计D表中的所有条目,其中“open”=true,并且它们的C.id具有相同的a.id和B.id 我希望查询在一行中返回计数、公共A.id和公共B.id 比如说 D表 C表 C.id = 2, A.id = 3, B.id = 5 C.id = 3, A.id = 3, B.id = 5 C.id = 4, A.id = 4, B.id = 6 Bc D中的前3个条目具有具有相同援助

以下是我的表格:

  • 元组表
  • 具有A.id和B.id项的C表
  • 具有C.id和布尔字段“open”的条目的D表
  • 我想统计D表中的所有条目,其中“open”=true,并且它们的C.id具有相同的a.id和B.id

    我希望查询在一行中返回计数、公共A.id和公共B.id

    比如说 D表

    C表

    C.id = 2, A.id = 3, B.id = 5 
    C.id = 3, A.id = 3, B.id = 5
    C.id = 4, A.id = 4, B.id = 6
    
    Bc D中的前3个条目具有具有相同援助和出价的CID,它们被计算在同一条目中。因此,查询应返回以下两个条目:

    1. count = 3  A.id = 3  B.id = 5
    2. count = 1  A.id = 4  B.id = 6
    
    我为AB制作了一个元组表,因为我认为它可以像下面的psuedo代码一样工作

    For each entry i in tuple Table AB 
       for each entry j in Table C 
          for each entry k in Table D 
              if j.AID AND j.BID equal to i.AID and i.BID
                  And if k.CID = j.id
                     Then returnHash[i] = returnHash[i] + 1    
    

    -可能没有必要,但我有一个扩展问题,我想做同样的事情,但现在结果中有另一列,即返回的计数值与c中某个字段中存在的值之间的差值。我将把它作为另一个问题发布,以及如何从A表和B表中获取与这些行相关的其他字段。我想获取字段A.name和B.status,并将其添加到行中的其余列中。您可以在选择列表和分组方式列表中添加您想要的任何列。我有一个扩展问题,我想做同样的事情,但现在结果中有另一列,即返回的计数值与c中某个字段中存在的值之间的差异。我将把它作为另一个问题发布,以及如何从A表和B表中获取与这些行相关的其他字段。我想获取字段A.name和B.status,并将其添加到行中的其余列中。您可以在选择列表和分组方式列表中添加所需的任何列。
    SELECT
      COUNT(*),
      c.aid,
      c.bid
    FROM
      d INNER JOIN c
    ON
      d.cid = c.id
    WHERE
      d.open
    GROUP BY
      c.aid,
      c.bid;
    
    SELECT
      COUNT(*),
      c.aid,
      c.bid
    FROM
      d INNER JOIN c
    ON
      d.cid = c.id
    WHERE
      d.open
    GROUP BY
      c.aid,
      c.bid;