Или я чего-то не понимаю, или запрос переусложнен.
Зачем подзапрос к checks, если с ним же джойнится таблица?
В любом случае - зачем WHERE, если оно тут же проверяется ON?
А главная тайна - что значит "d.ean = c.ean AND d.ean=c.ean"?
SELECT a.*,
b.summa, b.name, b.discount,
FROM params a
LEFT JOIN (
SELECT
COALESCE( sum( IF( vozvrat = 0, summa, -summa) ), 0) as summa,
d.name, d.discount
FROM `discounts` d
LEFT JOIN `checks` c ON d.ean = c.ean GROUP BY c.ean
) b ON b.ean=a.ean
WHERE a.somefield="somevalue"