Acho que você estava 99% lá:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Adicione o
&& A > 1
para a segunda instrução IF e sua terceira condição é satisfeita. Editar:
De acordo com o comentário de @Andre à pergunta e a sugestão de que o
IF
aninhado é difícil de ler, você também pode fazer isso como algumas consultas que não fazem nenhum trabalho desnecessário e são legíveis:UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Quando A for NULL, ele não atenderá a nenhuma dessas condições e, portanto, elimina a necessidade de especificar que A não seja NULL.
Em seguida, não há necessidade da terceira condição, como sugeriu @Andre. Se A estiver entre 1 e 20, fica como está.
Finalmente, definir A para 0 onde A é menor ou igual a 1 parece incomum. Os valores de 1 serão alterados para 0. Se você pretende simplesmente definir valores menores que 1 (incluindo valores negativos) para 0, você deve trocar
<
para <=
.