这是我的表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()”
答案 0 :(得分: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
可能因给定帐户的行而异。后一版本兼具这两种情况。