Когда я запускаю этот запрос, он работает
SELECT sum( amount ) AS balance FROM balance WHERE amount >= 100
но когда я хочу фильтровать для userid, он возвращает NULL
SELECT sum( amount ) AS balance FROM balance WHERE amount >= 100 AND userid=4
Он вернет NULL, если строк нет. Если вы хотите использовать нуль вместо этого, используйте это:
SELECT IFNULL(SUM(amount), 0) AS balance
FROM balance
WHERE amount >= 100 AND userid = 4
Если вы считаете, что ответ должен быть чем-то отличным от 0 или NULL, тогда я предлагаю вам запустить этот запрос, чтобы проверить, что вернется хотя бы одна строка и что данные верны:
SELECT *
FROM balance
WHERE amount >= 100 AND userid = 4