2016-12-10 1 views
0

の行数の条件としてデータの整数を使用すると、これは私のテーブルT1の表現です:テーブル

acc_id|acc_holders|bal_1|bal_2 
00001|002|50|100 
00001|002|50|100 
00002|001|100|100 
00003|003|50|100 
00003|003|50|100 

acc_holdersは、口座保有者の数を示します。 bal_1数字は、ホルダー間で均等に分割された口座残高を表します。 Bal_2は、アカウント全体の残高を表します。

一部の行では( 00003など)、acc_holdersの値とアカウントの表示回数(00003が3回表示される)が一致しないという問題があります。私のようなもの使用してこれらの異常を選択したいと思います

:これはエラースロー

SELECT acc_id from t1 
WHERE acc_holders <> count(distinct acc_id) 

を "集約関数数の誤用を()"

答えて

1

あなたは右のアイデアがあります

または、次のように指定することもできます。

select acc_id 
from t1 
group by acc_id, acc_holders 
having count(*) <> min(acc_holders) or 
     min(acc_holders) <> max(acc_holders); 

あなたには2つの潜在的な問題があります。 1つは、acc_holdersがアカウント行の数を表していない可能性があることです。もう1つは、特定のアカウントで行間でacc_holdersが異なる可能性があるということです。この後者のバージョンでは、この両方の状況が発生します。

+0

すばらしい、すばらしい返答のおかげで! – joshi123

+0

2番目のシナリオは存在しないが、どんな場合でもキャッチしようとする価値がある – joshi123

関連する問題