Zastąp WHERE klauzula z HAVING , tak:
SELECT o.ID , count(p.CAT)
FROM Orders o
INNER JOIN Products p ON o.P_ID = p.P_ID
GROUP BY o.ID
HAVING count(p.CAT) > 3;
HAVING jest podobny do WHERE , czyli oba są używane do filtrowania wynikowych rekordów, ale HAVING służy do filtrowania danych zagregowanych (gdy GROUP BY jest używany).