3

このクエリを使用して、テーブル内の重複する値を検索しています。

select col1, 
       count(col1) 
  from table1 
 group by col1 
having count (col1) > 1 
 order by 2 desc;

しかし、次のように、同じテーブルから別の列を追加したいと思います。

select col1, 
       col2, 
       count(col1) 
  from table1 
 group by col1 
having count (col1) > 1 
 order by 2 desc;

その2番目のクエリでORA-00979エラーが発生します

検索に別の列を追加するにはどうすればよいですか?

4

4 に答える 4

7

クエリは次のようになります

SELECT * FROM (
select col1, 
col2, 
count(col1) over (partition by col1) col1_cnt
from table1 
)
WHERE col1_cnt > 1 
order by 2 desc;
于 2013-01-25T18:23:02.347 に答える
3

col2おそらく、あなたはその複製ごとに取得したいと思うでしょうcol1。単一のクエリでそれを実際に行うことはできません^。代わりに、重複のリストを取得し、それを使用して他の関連する値を取得する必要があります。

select col1, col2
from  table1
where col1 in (select col1
               from table1 
               group by col1 
               having count (col1) > 1)
order by col2 desc

^わかりました。分析関数を使用して、@rsとして使用できます。実証された。このシナリオでは、ネストされたクエリの方が効率的だと思いますが、どちらも同じ結果になるはずです。


コメントによると、2番目の列を追加できない理由がはっきりしていないようです。次のようなサンプルデータがあるとします。

Col1 | Col2
-----+-----
   1 |   A
   1 |   B
   2 |   C
   2 |   D
   3 |   E

実行した場合

select Col1, count(*) as cnt 
from table1 
group by Col1
having count(*) > 1

その場合、結果は次のようになります。

Col1 | Cnt
-----+-----
   1 |   2
   2 |   2

Col2データベースには実際に必要な値を知る方法がないため、このクエリを句に追加せずに追加することはできませgroup byん(つまり、Col1 = 1の場合、DBは「A」または「B」を返す必要がありますか?)。句にCol2を追加するとgroup by、次のようになります。

select Col1, Col2, count(*) as cnt 
from table1 
group by Col1, Col2
having count(*) > 1

Col1 | Col2 | Cnt
-----+------+----
[no results]

Col1これは、との組み合わせごとにカウントされるためですCol2(それぞれが一意です)。

最後に、ネストされたクエリ(私の回答のように)または分析関数(@rs。の回答のように)のいずれかを使用すると、次の結果が得られます(クエリがわずかに変更されてカウントが返されます)。

select t1.col1, t1.col2, cnt 
from  table1 t1
join (select col1, count(*) as cnt
      from table1 
      group by col1 
      having count (col1) > 1) t2
on table1.col1 = t2.col1

Col1 | Col2 | Cnt
-----+------+----
   1 |   A  |   2
   1 |   B  |   2
   2 |   C  |   2
   2 |   D  |   2
于 2013-01-25T18:24:41.040 に答える
0

groupby句で選択したすべての列も一覧表示する必要があります。

select col1, 
       col2, 
       count(col1) 
  from table1 
 group by col1, col2
having count (col1) > 1 
 order by 2 desc;
于 2013-01-25T18:20:34.523 に答える
0

エラーの原因

GROUP BY関数(つまり、SQL MIN関数、SQL MAX関数、SQL SUM関数、SQL COUNT関数)を含むSQL SELECTステートメントと、SQLGROUPBY句にないSELECTリストの式を実行しようとしました。

select col1, 
    col2, 
    count(col1) 
    from table1 
    group by col1,col2
    having count (col1) > 1 
    order by 2 desc;
于 2013-01-25T18:20:36.390 に答える