2016-12-10 14 views
0

Это представление моей таблицы 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) 

Это бросает ошибку "злоупотребление совокупного подсчета функции()"

ответ

1

Вы имеете право идея:

Или, вы можете:

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 может варьироваться в зависимости от строк для данной учетной записи. Эта последняя версия получает обе эти ситуации.

+0

удивительный, спасибо за быстрый ответ! – joshi123

+0

уверен, что второго сценария не существует, но стоит попытаться поймать в любом случае – joshi123