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口座全体の残高を表します。

問題は、一部の行 ( acc_id00003 など) で、acc_holders値がアカウントの出現回数と一致しないことです (00003 は 3 回出現する必要があります)。

次のようなものを使用してこれらの異常を選択したいと思います。

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

これにより、「集約関数 count() の誤用」というエラーがスローされます。

4

1 に答える 1

1

あなたは正しい考えを持っています:

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

または、次のことが必要な場合があります。

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、勘定科目の行数を表していない可能性があることです。2 つ目はacc_holders、特定のアカウントの行間で異なる可能性があることです。この後者のバージョンでは、これらの両方の状況が発生します。

于 2016-12-10T21:49:53.227 に答える