[pgsql-jp: 33348] Re: 重複しているサブクエリーの省略
Akinori FUJII
showten24 @ yahoo.co.jp
2004年 6月 23日 (水) 13:10:04 JST
藤井と申します。
質問の内容がPostgreSQLというよりはSQL文についてなのかなと思いながら回答して
います。
hogeテーブルのPRIMARY KEYをご説明いただいていないので2通り考えました。
以下のようなSQLになるのではないでしょうか。
hogeテーブルの制約に「PRIMARY KEY ( d1, d2, name )」があるなら、
SELECT
d1,
d2,
name,
max(d3)
FROM
hoge
WHERE
d2!=3
GROUP BY
d1,
d2,
name
;
hogeテーブルの制約に「PRIMARY KEY ( d1, d2, name )」がないなら、
SELECT
hoge.d1,
hoge.d2,
hoge.name,
hoge.d3
FROM
hoge,
(
SELECT
name,
max(d3)
FROM
hoge
WHERE
d2!=3
GROUP BY
name
) AS max_hoge
WHERE
hoge.name = max_hoge.name
AND hoge.d3 = max_hoge.d3
;
#「PRIMARY KEY ( d1, d2, name )」は「UNIQUE ( d1, d2, name )」でも構いませ
ん。
もしhogeテーブルにこのような正規化がなされていないなら、渡辺さんのSQLにム
ダはないように思います。
--- Watanabe Takehiro <takk @ ntt-it.co.jp> からのメッセージ:
> select d1,d2,name,d3 from hoge where d2!=3 の結果
> d1 d2 name d3
> 1 1 P1 10
> 1 2 P1 13
> 2 1 P1 12
> 2 2 P1 13
> 3 1 P2 13
> 3 2 P2 21
> 4 1 P2 23
> 4 2 P2 23
>
> 最終的に欲しい結果
> d1 d2 name d3
> 1 2 P1 13
> 2 2 P1 13
> 4 1 P2 23
> 4 2 P2 23
>
pgsql-jp メーリングリストの案内