0

私はこの2つのテーブルを持っています。私がやろうとしているのは、ポジション番号、タイトル、およびアプリケーションの総数を見つけることです。

 CREATE TABLE   POSITION (
posNum          varchar2(10)    not null,
posTitle        varchar2(70),
posOfferedBy        varchar2(70),
);

CREATE TABLE    APPLICATION (
appcnPosNum     varchar2(10)    not null
);

これを実行すると、全ポジションの応募数が表示されます。応募のない職種でも、カウント表示は1となりますので、ご案内いたします。ありがとう。私はオラクルデータベース11gを使用しています

SELECT posNum, posTitle,count(*)
FROM position 
FULL OUTER JOIN application on position.posNum = application.appcnPosNum
GROUP BY posNum, posTitle;
4

1 に答える 1

0
select * from application;
APPCNPOSNU
----------
1
2
25
1

select * from position;

POSNUM     POSTITLE   POSOFFERED
---------- ---------- ----------
1          title1     pos1
2          title2     pos2
1          title1     pos3
3          title3     pos4

完全外部結合では、両方のテーブルからすべての行が取得されます。アプリケーション テーブルに重複があり、位置のないアプリケーションがある場合を除いて、個別でも問題ありません。

SELECT posNum, posTitle,count(distinct application.appcnPosNum) ct
FROM position 
FULL OUTER JOIN application on position.posNum = application.appcnPosNum
GROUP BY posNum, posTitle;

POSNUM     POSTITLE           CT
---------- ---------- ----------
null       null                1
3          title3              0
1          title1              1
2          title2              1

私は、すべての位置 (左のテーブルの行) を取得する左の結合を行い、2 番目に見つからないすべてのアプリケーションを null に置き換えることを好みます。すべては、これら 2 つのテーブル間の制約に依存します。

SELECT posNum, posTitle,count(appcnPosNum)
FROM position 
LEFT OUTER JOIN (select distinct appcnPosNum from application )app 
on position.posNum= app.appcnPosNum
GROUP BY posNum, posTitle;

POSNUM     POSTITLE   COUNT(APPCNPOSNUM)
---------- ---------- ------------------
3          title3                      0
1          title1                      2
2          title2                      1
于 2014-04-09T06:02:44.203 に答える