我有一张表格,它基本上将图表中的边缘表示为时间的函数(理想情况下,每个日期可以看作不同的图表,以及我如何看待它)。
它是这样的,fromNode和toNode的值具有相同的性质,并且它们可能会被重复(例如,节点可以在'来自'和'到& #39;同月):
fromNode, toNode, date
现在,我想计算一个给定月份和一组节点的度数(将图表视为无向,因此没有进出度)。我可以这样做:
select count(*) from mytable where (fromNode = thisvalue or toNode = thisvalue) and date = thisdate;
并拥有一个节点的学位。
目前无法解决的问题是如何以一种对一组节点起作用的方式扩展它。预期的结果将是:
node | degree
-------------
nodeA| 12
nodeB| 0
nodeC| 15
...
等等。提前谢谢。
(我正在使用postgresql,9.3)
答案 0 :(得分:2)
假设您有一个表格,其中包含所有节点(nodeTable
,其中包含一列node
),而边缘表名为edgeTable
,那么这将有效:
select
node,
(select count(*) from edgeTable
where (fromNode=node or toNode=node) and date=thisdate) degree
from nodeTable
如果您没有nodeTable
这样的东西,可以使用
select fromnode as node from edgeTable union select tonode as node from edgeTable
where date=thisdate
您可以将其用作子查询。
答案 1 :(得分:1)
尝试此查询:
SELECT AllNodes.node,
Count(*)
FROM (
SELECT "fromNode" As node
FROM Table1
UNION
SELECT "toNode"
FROM Table1
) AllNodes
JOIN Table1 t1
ON AllNodes.node IN( t1."fromNode", t1."toNode")
-- WHERE t1.date between etc
GROUP BY AllNodes.node
ORDER BY AllNodes.node
演示 - > http://sqlfiddle.com/#!15/21faa/4