1

Oracleで書き込もうとしているクエリに問題があります。

基本的に、同じプロバイダーリストを持つ2つのテーブルの数を取得したいと思います。クエリを個別に実行できますが、一度に実行する方法がわかりません。

次に例を示します。

SELECT name, COUNT(name)
FROM   table1
group by name

これにより、名前のリストとその横のカウントが表示されます。同じコマンドをtable2(fromステートメントを変更)で実行すると、正常に機能します。私がやりたいのは、table1からcountを取得し、table2からcountからそれを減算するクエリを作成することです。

どうすればいいですか?ネストされた選択などを実行しようとしましたが、機能しないようです。

4

1 に答える 1

4

name両方のテーブルの値が同一であると仮定した場合の1つのオプションは、

SELECT t1.name, t2.cnt - t1.cnt diff
  FROM( SELECT name, COUNT(name) cnt 
          FROM table1
         group by name ) t1,
      ( SELECT name, COUNT(name) cnt 
          FROM table2
         group by name ) t2
 WHERE t1.name = t2.name

一方のテーブルにもう一方のテーブルにはないが、どのテーブルに追加の名前があるのか​​わからない場合を処理したい場合(そして、もう一方のテーブルの名前が0であるnameと言いたい場合)cntname

SELECT coalesce(t1.name, t2.name) name, 
       nvl(t1.cnt, 0 ) t1_cnt,
       nvl(t2.cnt, 0 ) t2_cnt,
       nvl(t2.cnt,0) - nvl(t1.cnt,0) diff
  FROM( SELECT name, COUNT(name) AS cnt
          FROM table1
         group by table1.name ) t1
      full outer join
      ( SELECT name, COUNT(name) AS cnt
          FROM table2
         group by table2.name ) t2
      on( t1.name = t2.name )

このSQLFiddleで見ることができます

于 2013-01-22T21:27:41.757 に答える