[pgsql-jp: 37630] SLECTの結果が閾値を超えた場合に別処理させたい
河本陽一
komoto.yoichi @ kcc.co.jp
2006年 11月 6日 (月) 15:20:09 JST
こうもとです。
ホスト名とディレクトリ名の組み合わせのテーブルがあります。
ホストごとにディレクトリ名の一覧を取得したいのですが、各ホストのディ
レクトリ数が閾値を超えた場合は別の処理(専用のディレクトリ名を1行だけ
返す)にしたいのです。
テーブルの構造は、以下のようになっています。
#アクセスログの解析に使用しているので、日付情報も含まれています。
CREATE TABLE lfpath (
pno serial PRIMARY KEY,
logdate date,
host text,
path text
);
ホストごとに、パス名でソートした結果を取り出したいので、以下のよう
なSQLを発行しています。
=> SELECT host,path FROM lfpath WHERE logdate BETWEEN '2006-03-01'
AND '2006-03-31' GROUP BY host,path ORDER BY host,path;
この問い合わせでは、hostに対するpathの数が何件あろうとも全件返しま
す(当たり前ですが)。
以下のように、hostごとの件数を数えてからやろうとしましたが、毎日数
万件あるため、問い合わせコストが馬鹿になりません。
=> SELECT host,count(*) FROM lfpath WHERE (pno) in (SELECT distinct
on(host,path) pno FROM lfpath WHERE logdateBETWEEN '2006-03-01' AND
'2006-03-31') GROUP BY domain;
最悪、hostごとに返すpathの最大行数を閾値まで、というのでもよいかと
思っています。
#まだ、DBのつくりを考えているところですので、テーブルの構成はどうに
でもなります。
======================================================================
河本陽一(こうもとよういち)
mailto:komoto.yoichi @ kcc.co.jp
pgsql-jp メーリングリストの案内