我在数据库中有简单的表,其中包括列error_id,error_group_id和message。我想在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子句中每个组的出现次数。
所以想要输出跟随(每组单行):
消息,组散列,组内消息计数。
Project正在使用oracle作为数据库。
有人可以帮忙解决这个问题:P
答案 0 :(得分: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;
答案 1 :(得分: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