0

我在数据库中有简单的表,其中列 error_id、error_group_id 和消息。我想在 UI 中显示列表,其中显示消息和每个错误组的出现。

错误消息可能略有不同(例如:设置 X 在日期过期),例如日期可能会发生变化,但 error_group_id 是来自要用于分组的已定义常量的哈希值,不会改变(例如,可能是 ( AssemblyName+"设置过期").GetHashCode()。

目前我可以列出带有消息的组:

 SELECT message, error_group_id
 FROM (SELECT error_id, message, error_group_id,
 rank() OVER ( PARTITION BY error_group_id ORDER BY error_id) rank
 FROM cc_errors)
 WHERE rank <= 1;

输出:(随机选择一个)消息,组散列。(每组仅一次)。

但是,我想要有关组内有多少个单独的错误消息的信息(双击组打开显示单个错误列表的窗口)。我想计算这个 SQL 子句中每个组的出现次数。

所以想要的输出如下(每组单行):

消息,组哈希,组内的消息计数。

项目使用 oracle 作为数据库。

有人可以帮忙吗:P

4

2 回答 2

5

您可以COUNT在当前查询中添加一个:

SELECT message, error_group_id, cnt
  FROM (SELECT error_id,
               message,
               error_group_id,
               rank() OVER (PARTITION BY error_group_id ORDER BY error_id) rank,
               count(*) OVER (PARTITION BY error_group_id) cnt
          FROM cc_errors)
 WHERE rank <= 1;
于 2012-07-12T13:08:14.367 回答
0

我想你只是在寻找group by

 select distinct c.message, c.error_group_id, t.error_group_count
   from cc_errors c
           inner join
        (select error_group_id, count(*) as error_group_count
           from cc_errors
          group by error_group_id) t  on t.error_group_id = c.error_group_id

这会返回您要求的内容,但似乎没有意义。我会这样做:返回所有带有组 ID 的消息,然后当您单击组 ID 时,执行select count(*) from cc_errors where error_group_id = @groupId

于 2012-07-12T12:49:12.280 回答