- - PR -
このコマンドを簡潔にできませんか?@PostgreSQL
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-25 16:11
いつも拝見してばかりですが、よろしくお願いします。
「商品ID一覧を持ったテーブルCATEGORYの全品を対象に、 カテゴリIDで紐づくUSERLOGテーブルに記載されたレコードが何件あるかを抽出する」 当初、以下のようなSQLを発行しました。 SELECT C.CID, (SELECT COUNT(U.CID) FROM USERLOGS U WHERE C.CID=U.CID GROUP BY U.CID) AS CNT FROM CATEGORY C ORDER BY C.CID; この場合、カウントが0件の場合、NULLとなってしまうため、 結果はNULL混じりのデータになってしまいます。 PostgreSQLをあまり扱ったことがないのですが、 単純に以下のようなSQLを作成し、目的を達することができました。 SELECT C.CID, CASE WHEN (SELECT COUNT(U.CID) FROM USERLOGS U WHERE C.CID=U.CID GROUP BY U.CID ) >0 THEN (SELECT COUNT(U.CID) FROM USERLOGS U WHERE C.CID=U.CID GROUP BY U.CID ) ELSE 0 END AS CNT FROM CATEGORY C ORDER BY C.CID; しかし、素人目から見ても、明らかにスマートではありません。 もっと単純に片付ける方法はありますでしょうか? プログラムでデータを加工すれば簡単ですが、 今回はSQLだけで片付けたいと考えております。 ご教授ください。 よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2006-01-25 17:49
という状態で、以下のSQLを実行しました。
で、得られた結果は以下のとおりですが、期待に沿えてますか?
| ||||||||||||
|
投稿日時: 2006-01-25 17:53
書き忘れました。
結果のNULLがいやならば、このドキュメントを読んで利用すといいかと思います。 http://www.postgresql.jp/document/pg812doc/html/functions-conditional.html#AEN12670 | ||||||||||||
|
投稿日時: 2006-01-25 18:20
ありがとうございます。
試してみたところ、期待していた結果が返ってきました。 テーブル結合についてもいろいろと試してみたのですが、うまくいかなかったので、 もしかして使えないのかも・・・と思っておりました^^; 自分の作成したものと比較して、猛勉強します。 また機会がありましたら、よろしくお願いいたします。 |
1