[pgsql-jp: 39442] 0件でも表示

HOTTA Michihide hotta @ net-newbie.com
2008年 6月 19日 (木) 21:52:37 JST


堀田@長崎市です。

CREATE  TABLE   category    (
    code    INT,
    name    TEXT
);
INSERT  INTO    category    VALUES(1, 'cat-1');
INSERT  INTO    category    VALUES(2, 'cat-2');
INSERT  INTO    category    VALUES(3, 'cat-3');
INSERT  INTO    category    VALUES(4, 'cat-4');

CREATE  TABLE   article (
    seq         SERIAL,
    code        INT,
    contents    TEXT
);
INSERT  INTO    article     VALUES(1, 1, 'article-1-1');
INSERT  INTO    article     VALUES(2, 2, 'article-2-2');
INSERT  INTO    article     VALUES(3, 2, 'article-3-2');
INSERT  INTO    article     VALUES(4, 4, 'article-4-4');
INSERT  INTO    article     VALUES(5, 1, 'article-5-1');

(上記は質問のためのサンプルです。かなり簡略化しました。)

こういうデータから、カテゴリごとの記事の件数を取得します。

SELECT DISTINCT
    category.code
  , name
  , count(*)
FROM   category,article
WHERE  category.code = article.code
GROUP BY    category.code, category.name;

 code | name  | count
------+-------+-------
    1 | cat-1 |     2
    2 | cat-2 |     2
    4 | cat-4 |     1
(3 行)

こうすると、記事のない cat-3 については出力されません。

 code | name  | count
------+-------+-------
    1 | cat-1 |     2
    2 | cat-2 |     2
    3 | cat-3 |     0
    4 | cat-4 |     1
(4 行)

後者のように出力したいのですが、どうすればよいでしょうか?
JOIN を使うんじゃないかなーとは思ってるんですが…。

-- 
HOTTA Michihide <hotta @ net-newbie.com>



pgsql-jp メーリングリストの案内