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

Using integer in data as condition on number of rows in table

这是我的 table 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 这些异常使用类似的东西:

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

这会引发错误 "misuse of aggregate function 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 可能因给定帐户的行而异。后一个版本适用于这两种情况。