1

私の SQL クエリは、「A」、「B」、「C」、「D」の 4 つの列で結果を返します。

結果は次のようになります。

A    B    C    D
1    1    1    1
1    1    1    2
2    2    2    1

各行に列「A」、「B」、「C」がある重複行の数を取得することは可能ですか。

たとえば、期待される結果は次のとおりです。

A    B    C    D    cnt
1    1    1    1    2
1    1    1    2    2
2    2    2    1    1

count(*) over を使ってみました。しかし、クエリによって返された行の総数が返されます。もう1つの情報は、例では、カウントを確認する必要がある列を3つだけ言及したことです。しかし、私の実際のクエリにはそのような 8 つの列があります。また、データベースの行数は膨大です。したがって、ここでは group by は実行可能なオプションではないと思います。どんなヒントでも結構です。ありがとう。

4

3 に答える 3

8

手遅れかもしれませんが、おそらくoracle内の分析関数(別名ウィンドウ関数)としてのカウントが役立ちます。私があなたの要求を正しく理解するとき、これはあなたの問題を解決するはずです:

create table sne_test(a number(1)
                 ,b number(1)
                 ,c number(1)
                 ,d number(1)
                 ,e number(1)
                 ,f number(1));

insert into sne_test values(1,1,1,1,1,1);
insert into sne_test values(1,1,2,1,1,1);
insert into sne_test values(1,1,2,4,1,1);
insert into sne_test values(1,1,2,5,1,1);
insert into sne_test values(1,2,1,1,3,1);
insert into sne_test values(1,2,1,2,1,2);
insert into sne_test values(2,1,1,1,1,1);

commit;

 SELECT a,b,c,d,e,f, 
       count(*) over (PARTITION BY a,b,c)
  FROM sne_test;

 A  B  C  D  E  F AMOUNT
-- -- -- -- -- -- ------
 1  1  1  1  1  1      1
 1  1  2  4  1  1      3
 1  1  2  1  1  1      3
 1  1  2  5  1  1      3
 1  2  1  1  3  1      2
 1  2  1  2  1  2      2
 2  1  1  1  1  1      1
于 2013-01-18T15:07:29.490 に答える
5

重複を見つけるには、キー列に基づいてデータをグループ化する必要があります

select 
  count(*)
  ,empno 
from 
  emp
group by
  empno
having
  count(*) > 1;

empnoこれにより、各カテゴリに複数のレコードが存在する場合 (複数) で集計することができます。

于 2014-09-06T06:35:40.770 に答える
2

A、B、C でグループ化された行数を取得するサブクエリを使用する必要があります。次に、このサブクエリをテーブル (またはクエリ) に再度結合します。次のようにします。

select your_table.A, your_table.B, your_table.C, your_table.D, cnt
from
  your_table inner join
  (SELECT A, B, C, count(*) as cnt
   FROM your_table
   GROUP BY A, B, C) t
  on t.A = your_table.A
     and t.B = your_table.B
     and t.C = your_table.C
于 2012-12-08T09:18:01.430 に答える