如何根据选择性列 SQL 服务器计算 DISTINCT
How to COUNT DISTINCT on basis of Selective columns SQL Server
我在 SQL 服务器中有一个 table,其中包含 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
...
...
而我必须仅根据两列(即 Source_Node
和 Target_Node
计算不同的行,例如id
1 和 2 的行在 Source_Node
和 Target_Node
中具有相同的值,因此这些应该只获取一次。我试过查询:
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。
如何修改查询?
谢谢!
尝试按您的源节点和目标节点分组。然后计算分组的行数。
select count(*) from
(select Source_Node_Type, Target_Node_Type from GraphEdges group by Source_Node_Type, Target_Node_Type) a
你可以像这样用另一个 select 包裹它:
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...))
我在 SQL 服务器中有一个 table,其中包含 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
...
...
而我必须仅根据两列(即 Source_Node
和 Target_Node
计算不同的行,例如id
1 和 2 的行在 Source_Node
和 Target_Node
中具有相同的值,因此这些应该只获取一次。我试过查询:
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。
如何修改查询?
谢谢!
尝试按您的源节点和目标节点分组。然后计算分组的行数。
select count(*) from
(select Source_Node_Type, Target_Node_Type from GraphEdges group by Source_Node_Type, Target_Node_Type) a
你可以像这样用另一个 select 包裹它:
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...))