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が何か間違ったことをしていると思います。

しかし、私は自分のやり方でグループ化できますか?これは、選択によってメッセージのみがグループ化されてカウントされ、ERRORFOOが私の例から4004になるように解決された修正バージョンです。

4

1 に答える 1

1

クエリでは、メッセージが異なる場合、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

ここで、この人の最初の人をアルファベット順に返すように変更messageしました。MIN(message)message


ただし、1人あたり複数のレコードを返すことができれば、スクリプトに問題はありません。テーブル内で最も多いもののリストpersonidと順序が表示され、で始まるレコードのみが表示されます。messagemessageERR

于 2012-04-11T08:29:21.260 に答える