使用数据中的整数作为 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
可能因给定帐户的行而异。后一个版本适用于这两种情况。
这是我的 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
可能因给定帐户的行而异。后一个版本适用于这两种情况。