1

对于这里的一些人来说,一些简单的点,请看下面的数据表:

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 没有)

可能真的很简单,涉及团体,但我只是看不到树木的树林。

顺便说一句,该表中有数百万行。

4

5 回答 5

4
SELECT COUNT(DISTINCT ProcessID) FROM table
WHERE EventCode < 0
于 2012-06-28T19:28:36.367 回答
1

快速的答案是

SELECT COUNT(DISTINCT t.ProcessId)
  FROM mytable t
 WHERE t.EventCode < 0
   AND t.ProcessId IS NOT NULL

(没有必要在 ProcessId 上包含谓词;我在这里指出 COUNT 不会包含 NULL 值。)

这是最简单的方法,但不是唯一的方法。

其他可能查询的性能实际上将取决于表的组织(HEAP 或 CLUSTERED),以及可用的索引。

于 2012-06-28T19:29:33.677 回答
1

如果有多个负值具有相同的 ProcessId:

SELECT COUNT(DISTINCT ProcessId) FROM table WHERE EventCode < 0;
于 2012-06-28T19:30:02.030 回答
1

如果您希望按以下方式分组计数ProcessId

SELECT COUNT(*), [ProcessId] 
FROM TBL
WHERE [EventCode] < 0
GROUP BY [ProcessId]

如果你想要整个负数:

SELECT COUNT(DISTINCT([ProcessId])) FROM Tbl WITH (NOLOCK) WHERE [EventCode] < 0

为了提高性能: 在 column 上创建一个过滤的非聚集索引EventCode并包含 column ProcessId,其中EventCode< 0。

于 2012-06-28T19:30:24.867 回答
-1

希望你的意思是:

select count(*) from (YourTableNameHere) where EventCode < 0

于 2012-06-28T19:27:10.697 回答