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);

你有两个潜在的问题。一是acc_holders可能不代表帐户行数。第二个是acc_holders给定帐户的行之间可能会有所不同。后一个版本同时满足这两种情况。

于 2016-12-10T21:49:53.227 回答