0

我有一个记录错误的系统。从我的错误表中选择:

SELECT message, personid, count(*)
FROM errorlog
WHERE time BETWEEN TO_DATE(foo) AND TO_DATE(foo) AND substr(message,0,3) = 'ERR'
GROUP BY personid, message
ORDER BY 3

我想要看看是否有任何用户比其他用户“产生”更多错误。例如 ERROR FOO,如果用户 A 有 4 个错误,而用户 B 有 4000 个错误,那么逻辑让我觉得用户 B 做错了什么。

但是我可以按照我的方式分组吗?这是一个修改版本,其中选择仅对消息进行分组并对其进行计数,从而解决了 ERROR FOO 在我的示例中导致 4004 的问题。

4

1 回答 1

1

通过您的查询,如果消息不同,那么您将获得每人多条记录。

如果您只想要每人一条记录,则需要在周围放置一个聚合函数message

例如你可以这样做:

SELECT MIN(message), personid, count(*)
FROM errorlog
WHERE time BETWEEN TO_DATE(foo) AND TO_DATE(foo) AND substr(message,0,3) = 'ERR'
GROUP BY personid, message
ORDER BY 3

在这里,我已更改messageMIN(message)which 将按message字母顺序返回此人的第一个。


但是,如果您乐于为每个人返回多条记录,那么我认为您的脚本没有问题。它将显示表中最多的列表personid并按message其排序,仅显示以message开头的记录ERR

于 2012-04-11T08:29:21.260 回答