2017-11-03 2 views
0

次のようにoracle dbにテーブルがあります。SQLの行の値がその行の値の行の数がその行の値の列の値と一致する場合

ID | TOTAL_IDS 
----+---------- 
A1 + 2 
A1 + 2 
B1 + 1 
C1 + 3 
C1 + 3 
C1 + 3 
D1 + 2 

個別IDの数がTOTAL_IDと一致するIDのリストが必要です。たとえば。 ID A1のカウントは2で、TOTAL_IDS列と一致します。

したがって、私のクエリはA1、B1、C1を返します。

+1

あなたは(D 1,1)を追加した場合は? – jarlh

+0

このテーブルは、練習目的でのみ作成されています。実際のデータベースでは、このようなテーブルはもちろん存在しないはずです。 –

+0

@ThorstenKettner - テーブルがoracle dbに存在します。しかし、これはオリジナルのdbを表すことに過ぎません。 –

答えて

4

句を持って試してみてください:http://sqlfiddle.com/#!4/06eed6/9
min=max ==>すべての行が(IDSによってグループ)同じ値を持つ
min=count ==>あなたの期待citeria

select 
    IDS 
from 
    your_table 
group by 
    IDS 
having 
    min(TOTAL_IDS) = count(*) and 
    max(TOTAL_IDS) = min(TOTAL_IDS) 

リターン:

| IDS | 
|-----| 
| A1 | 
| B1 | 
| C1 | 
0
select ID,count(ID) from table group by ID having count(ID)=count(TOTAL_IDS); 
+2

あなたの答えについての説明を書くことをお勧めします –

1
select distinct id 
from tablename t1 
where TOTAL_IDS = (select count(*) from tablename t2 
        where t2.id = t1.id) 

不整合なテーブルデータを検出しません。 if( 'D1'、4)または '(D2'、null)がテーブルに追加されます。

+0

これはまた働いた! :) –

0

試してみてください。

SELECT ID, TOTAL_IDS 
FROM tb 
GROUP BY ID, TOTAL_IDS 
HAVING COUNT(ID) = TOTAL_IDS 
関連する問題