Недавно появилась такая задачка: есть таблица с изменениями кармы пользователя. В таблицу добавляются записи вида: (id, user_id, , direction), где id - идентификатор записи, user_id - идентификатор пользователя, direction - направление изменения кармы может быть up или down. Нужно посчитать текущую карму для некоторого заданного пользователя.
Все бы хорошо, но есть одно условие - карма не может опускаться ниже нуля, то есть например для записей вида:
id user_id direction
1 1 up
2 1 up
3 1 down
для пользователя с user_id=1 карма будет равна 1, но для записей
id user_id direction
1 1 down
2 1 up
3 1 down
для пользователя с user_id=1 карма будет равна нулю, так как первая запись не считается.
То есть если описать алгоритм подсчета кармы - он будет примерно следующий
- инициализируем переменную карма=0
- идем по каждой записи:
- если direction == up - прибавляем к текущему значению кармы единицу
- если direction == down
- если текущее значение кармы > 0 - вычитаем из него единицу
- если текущее значение кармы == 0 - ничего не делаем
никак не пойму, можно ли и если можно то как оформить данный алгоритм в виде sql запроса (база postgresql 9.2, если это имеет значение)