Error in update. I did not find the error. Why is max(C) not found?
You just need a select within your update:

update z 
set b = c / (SELECT max(c) FROM z) * 100;


Check it at db&lt;>fiddle here

max(c) without more context is not part of the SQL standard. However, you can always use a SELECT returning a single row with a single column (of the appropriate type) where a value is expected.

That's what you'll get:


SELECT
    *
FROM
    z;

  a |      b |     c
 -: | -----: | ----:
  1 |  25.00 | 20.00
  2 |  12.50 | 10.00
  3 |  50.00 | 40.00
  4 | 100.00 | 80.00


And this works not only in PostgreSQL. See SQL Server, or MariaDB, or Oracle, or SQLite, or DB2