这是我的表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_id
00003)中,acc_holders
值不符合出现帐户的次数(00003应该出现3次)。
我想使用以下内容选择这些异常。
SELECT acc_id from t1
WHERE acc_holders <> count(distinct acc_id)
这引发错误"滥用聚合函数count()"
您有正确的想法:
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
在给定帐户的行之间可能有所不同。后一个版本都有这两种情况。