重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちわ。
OUTER JOINを使ったSQL文について質問させてください。
今3つのテーブル(EMPLOYEES, CUSTOMERS, ZIPCODES)があるとします。郵便番号ごとに従業員とお客さんのIDを表示するSQLはわかるのですが(下に書きます)、郵便番号ごとに従業員とお客さんの数を表示するSQL文がわからず、途方に暮れてます。どなたか教えていただけないでしょうか? よろしくお願いいたします。

郵便番号ごとに従業員とお客さんのID
SQL> select z.zip, e.eno, c.cno from zipcodes z full outer join employees e
on (z.zip=e.zip) full outer join customers c on (z.zip=c.zip);

ZIP ENO CNO
---------- ---------- ----------
49008 1001   1111
49009    2222
49001 1000 3333
49017 1002
49023
49024


それをこうしたいのですが・・

ZIP ENUM CNUM
 ---------- ---------- ----------
49008 1 1
49009 1
49001 1 1
49017 1
49023
49024

A 回答 (2件)

データの関係性がイマイチ理解できないのですが・・



投稿内容通りに、SQLを素直に書き直すと、

select
z.zip,
count(e.eno) enum,
count(c.cno) cnum
from zipcodes z
full outer join employees e on (z.zip=e.zip)
full outer join customers c on (z.zip=c.zip)
group by z.zip
;
    • good
    • 0
この回答へのお礼

korochanさん
ありがとうございました。
なぜかぜんぜん思いつきませんでした。

お礼日時:2006/03/31 14:34

こんなんでできそうな気がしますが、どうでしょう?


こちらに環境がありませんので試していません。
もしも、期待されている結果と違う場合はお手数ですが補足をお願いいたします。
select z.zip, nvl(e.e_cnt, 0) e_cnt, nvl(c.c_cnt, 0) c_cnt
from zipcodes z
full outer join (select count(*) e_cnt, zip from employees group by zip) e
on (z.zip=e.zip)
full outer join (select count(*) c_cnt, zip from customers group by zip) c
on (z.zip=c.zip);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!