这里有人可以轻松点一下,请看下面的数据表:
EventCode ProcessId
---------- ---------
2 1
-6 3
42 1
-6 2
-12 2
23 4
4 2
-23 1
12 3
-26 1
我需要一个查询,它将获得所有进程ID的计数,其中存在负面事件代码。因此,从上面的数据集中,结果将是3(进程ID的1,2和3具有负的事件代码,进程ID 4没有)
可能非常简单,涉及群体,但我根本看不到树木。
除此之外,此表中有数百万行。
答案 0 :(得分:4)
SELECT COUNT(DISTINCT ProcessID) FROM table
WHERE EventCode < 0
答案 1 :(得分:1)
快速回答是
SELECT COUNT(DISTINCT t.ProcessId)
FROM mytable t
WHERE t.EventCode < 0
AND t.ProcessId IS NOT NULL
(没有必要在ProcessId上包含谓词;我在这里指出COUNT不包含NULL值。)
这是最简单的方法,但不是唯一的方法。
其他可能的查询的性能实际上取决于表的组织(HEAP或CLUSTERED)以及可用的索引。
答案 2 :(得分:1)
如果有多个具有相同ProcessId的负值:
SELECT COUNT(DISTINCT ProcessId) FROM table WHERE EventCode < 0;
答案 3 :(得分:1)
如果您想要按ProcessId
分组的计数,请执行以下操作:
SELECT COUNT(*), [ProcessId]
FROM TBL
WHERE [EventCode] < 0
GROUP BY [ProcessId]
如果您想要完整的负数:
SELECT COUNT(DISTINCT([ProcessId])) FROM Tbl WITH (NOLOCK) WHERE [EventCode] < 0
表现出色:
在列EventCode
上创建已过滤的非聚集索引,并包含列ProcessId
,其中EventCode
&lt; 0
答案 4 :(得分:-1)
希望你的意思是:
select count(*) from (YourTableNameHere) where EventCode < 0