質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

3回答

2621閲覧

Oracle 副問い合わせ 集計

tentem

総合スコア26

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

1クリップ

投稿2016/05/31 08:11

編集2016/05/31 08:18

いつも大変お世話になっております。

表A 表B
ーーーーーーーーーー -----------
会社名 会社CD 会社CD 従業員名
〇〇会社|会社コード 会社コード|☆☆さん
△△会社|会社コード 会社コード|★★さん
◇◇会社|会社コード 会社コード|&&さん
〇〇会社|会社コード 会社コード|&&さん
◇◇会社|会社コード 会社コード|★★さん
〇〇会社|会社コード 会社コード|☆☆さん

上記の様な表がありまして、
会社コードで内部結合をし、どに会社に一番従業員がいるかを集計し、一番従業員が多い会社の従業員一覧を表示させたいのです。

結果イメージ
ーーーーーーーーーーー
&&さん
☆☆さん
★★さん
&&さん
☆☆さん
☆☆さん
★★さん

の様な感じです。

SELECT
MAX(従業員名)
FROM
(SELECT
会社CD,
従業員名
FROM
表A HA INNER JOIN 表B HB
ON (HA.会社CD = HB.会社CD)
GROUP BY
会社名,
従業員名)T1,
(SELECT
COUNT(従業員名) as syain,
会社名
FROM
表B)T2

という感じで書いてみたのですが、書き直しても書き直してもエラーが出てしまって出力できません・・・。
どうすればよいのでしょうか?

会社CD=CHAR
従業員名=VARCHAR2
会社名=CHAR

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gusao

2016/05/31 08:17

どのようなエラーが出るのでしょうか?また、「従業員名」「社員名」は同じものですか?その場合、どちらかに統一して質問文の修正をお願いします。
tentem

2016/05/31 08:20

大変申し訳ありません。 従業員名と社員名は同じものでございます。 自分で色々と試行錯誤しながら修正し、修正しで書いていて 色々なエラーが出てしまっているのですが、 この状態でのエラーは「表Bは無効です」 と表示されております。
guest

回答3

0

これでいかがでしょう。

SQL

1select 表A.会社名,表B.従業員名 from 表B,表A, 2 ( 3 select 会社CD,rank() over(order by 従業員数 desc,会社CD) as ランク 4 from 5 (select 会社CD,count(*) 従業員数 from 表B a group by 会社CD) 6 ) 表C 7where 表A.会社CD = 表B.会社CD 8and 表A.会社CD = 表C.会社CD and ランク = 1;

rank関数で、従業員が多い会社CD、従業員が同じ場合は会社CDの若い番号を取得します。
ランクの引数を変えれば2番目に多い会社の一覧も出せます。

投稿2016/05/31 09:26

Yuna.S

総合スコア81

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自分だったらこういう一発調査系は

SQL

1SELECT 会社CD 2FROM (SELECT 会社CD,COUNT(*) AS NUM FROM 表B GROUP BY 会社CD) 3ORDER BY NUM DESC 4WHERE ROWNUM=1;

これで該当会社コードを取り出して

SQL

1SELECT 従業員名 FROM 表B WHERE 会社CD='xxx';

あんまり無理してまで一発処理する必要はないんじゃないかなあ、と。

投稿2016/06/01 00:20

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな感じでどうですかね?

SQL

1select 会社名,従業員名 2from 表A inner join 表B on 表A.会社CD = 表B.会社CD 3where 表A.会社CD = ( 4 select 会社CD 5 from ( 6 select 会社CD,count(従業員名) as SHAIN_COUNT 7 from 表B 8 group by 会社CD 9 order by SHAIN_COUNT DESC 10 ) 11 where ROWNUM = 1 12 )

投稿2016/05/31 08:38

編集2016/05/31 23:39
trick

総合スコア366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問