Вам нужно добавить sale_type
столбец к GROUP BY
для внутреннего запроса, и это должно быть group by user_id, sale_type
для правильных результатов для вашего стиля запроса.
P.S. на самом деле, я не думаю, что вам нужен подзапрос.
Приведенный выше запрос дает результат как 60
, тогда как
select SUM(CASE WHEN p1.sale_type='cash' THEN p1.amount ELSE 0 END) as cash
from
(select distinct user_id, SUM(amount) AS amount, sale_type
from payments
where payment_time = date'2018-04-01'
group by user_id, sale_type) p1;
или
select SUM(CASE WHEN sale_type='cash' THEN amount ELSE 0 END) as cash
from payments
where payment_time = date'2018-04-01'
дает 40
для результирующего cash
столбца
Демонстрация SQL Fiddle