Voyez si cela vous aide :
SELECT contracts.currency , ROUND(SUM(
CASE contracts.currency
WHEN 'USD' THEN contracts.value*550
WHEN 'UF' THEN contracts.value*22000
ELSE contracts.value
END),2)
AS real_value
FROM contracts
WHERE currency IN ('USD','UF','CLP') AND
date >=DATE_SUB(curdate(), INTERVAL 1 MONTH) AND
date <=curdate()
GROUP BY currency
ORDER BY currency ASC
Sinon, il serait bien de vérifier le type de la colonne "date" dans le tableau. Parfois, c'est varchar au lieu de date. C'est au cas où vous n'êtes pas celui qui a créé la table.