Creo que estabas en un 99 % ahí:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Agrega el && A > 1
a la segunda instrucción IF y se cumple su tercera condición.
Editar:
Según el comentario de @Andre a la pregunta y la sugerencia de que el IF
anidado es difícil de leer, también puede hacer esto como un par de consultas que no hacen ningún trabajo innecesario y son legibles:
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Cuando A es NULL, no cumplirá ninguna de estas condiciones y, por lo tanto, elimina la necesidad de especificar que A no sea NULL.
A continuación, no hay necesidad de la tercera condición como sugirió @Andre. Si A está entre 1 y 20, se deja como está.
Finalmente, establecer A en 0 donde A es menor o igual a 1 parece inusual. Los valores de 1 se cambiarán a 0. Si tiene la intención de simplemente establecer valores inferiores a 1 (incluidos los valores negativos) a 0, debe cambiar <
para <=
.