Penso che tu fossi lì al 99%:
UPDATE table
SET A = IF(A > 20, 20, IF(A < 20 && A > 1, A, 0))
WHERE A IS NOT NULL;
Aggiungi il && A > 1
alla seconda istruzione IF e la tua terza condizione è soddisfatta.
Modifica:
Per il commento di @Andre alla domanda e il suggerimento che il IF
nidificato è difficile da leggere, potresti anche farlo come un paio di query che non fanno alcun lavoro inutile e sono leggibili:
UPDATE table SET A = 20 WHERE A > 20;
UPDATE table SET A = 0 WHERE A <= 1;
Quando A è NULL, non soddisfa nessuna di queste condizioni, eliminando così la necessità di specificare che A non sia NULL.
Successivamente, non è necessaria la terza condizione come suggerito da @Andre. Se A è compreso tra 1 e 20, viene lasciato così com'è.
Infine, impostare A su 0 dove A è minore o uguale a 1 sembra insolito. I valori di 1 verranno cambiati in 0. Se intendi semplicemente impostare i valori inferiori a 1 (inclusi i valori negativi) su 0, devi scambiare <
per <=
.