我在SQL Server中有一个包含7列的表:
----------------------------------------------------------------------------------------
id | Source_Node | Source_Node_Type | Target_Node | Target_Node_Type | Year | Edge_Type
----------------------------------------------------------------------------------------
1 10965 2 23036 3 2005 2
2 10965 2 23036 3 2005 2
3 2947 2 23036 3 2005 2
4 37529 4 23036 3 2005 4
...
...
然而,我必须仅基于两列来计算DISTINCT行,例如Source_Node
和Target_Node
,例如id
1和2的行具有Source_Node
和Target_Node
的相同值,因此这些行应仅获得COUNT一次。我尝试过查询:
SELECT COUNT(*) FROM GraphEdges
WHERE Source_Node IN (...Node_List...)
AND Target_Node IN (...Node_List)
在尝试此查询时,它给出的COUNT为58:
SELECT DISTINCT Source_Node, Target_Node FROM GraphEdges
WHERE Source_Node IN (...Node_List...)
AND Target_Node IN (...Node_List...)
它给出53行,我需要的数字,但它给出了整行,而我需要COUNT数字,即53
如何修改查询?
谢谢!
答案 0 :(得分:0)
尝试按源节点和目标节点进行分组。然后计算分组的行。
select count(*) from
(select Source_Node_Type, Target_Node_Type from GraphEdges group by Source_Node_Type, Target_Node_Type) a
答案 1 :(得分:0)
您可以使用另一个选项包装它:
SELECT COUNT(*) FROM (
SELECT DISTINCT Source_Node, Target_Node FROM GraphEdges
WHERE Source_Node IN (...Node_List...)
AND Target_Node IN (...Node_List...))
或者没有子查询的解决方案:
SELECT count(distinct concat(Source_Node,Target_Node))
FROM GraphEdges
WHERE Source_Node IN (...Node_List...)
AND Target_Node IN (...Node_List...))