[pgsql-jp: 32235] Re: 集計方法について
Mashiki
mashiki @ yanah.com
2004年 2月 9日 (月) 22:15:50 JST
Mashikiです。
>なるほど!
>SQL結果にばかりこだわっておりました。
>
>煮詰まっておりましたので、目から鱗です。
>プログラムサイドで横展開させようと思います。
もう解決されているようですし、今回の件はSQLで解決するのが
的確であったと言う報告ですので問題はないかと思うのですが、
クロス集計の列が少数かつ限定されている場合には、SQL内に
列の値をハードコードして無理やり?SQLで対応するのもありとは
思いますが、限定できない場合や行数が非常に多い表に関しては
、川瀬さんのように二次元へのマッピングはプログラミング言語側
のほうがよいかと思います。
> select C1,
> sum(case C2 when 200 then 1 else 0 end),
> sum(case C2 when 300 then 1 else 0 end),
> sum(case C2 when 500 then 1 else 0 end)
> from Tbl1
> group by C1
の例だとC2の値として100と400と600が増えたときにSQLを変えなくては
いけません。
またDBの各行にC2のとりうる値分のの比較と足し算が増えるため、
select C1,
sum(case C2 when 000 then 1 else 0 end),
sum(case C2 when 010 then 1 else 0 end),
sum(case C2 when 020 then 1 else 0 end),
:
:
sum(case C2 when 980 then 1 else 0 end),
sum(case C2 when 990 then 1 else 0 end),
from Tbl1
group by C1
とした場合、行が30万行、C2の取りうる値が100通りの場合、3千万回の比較と
足し算を行うことになります。
pgsql-jp メーリングリストの案内