Hier is een oplossing. Verlaag eerst de set tot afzonderlijke rijen in een afgeleide tabel en pas vervolgens de GROUP BY toe op dat resultaat:
SELECT SUM(case when d.status = 2 then d.value end) as 'val_accepted'
FROM (
SELECT DISTINCT p.id, p.status, p.value, pc.library_id
FROM props p
INNER JOIN p_contents AS pc ON p.id = pc.prop_id
INNER JOIN contents AS c ON c.id = pc.library_id
WHERE p.account_id = 3) AS d
GROUP BY d.library_id
U gebruikt DISTINCT(pc.library_id)
in uw voorbeeld, alsof DISTINCT alleen van toepassing is op de kolom tussen haakjes. Dit is een veel voorkomende misvatting. DISTINCT is van toepassing op alle kolommen van de selectielijst. DISTINCT is geen functie; het is een query-modifier.