在数据中使用整数作为表中行数的条件

时间:2016-12-10 21:47:53

标签: sql count distinct db2-zos

这是我的表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()”

1 个答案:

答案 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可能因给定帐户的行而异。后一版本兼具这两种情况。