Não. O valor da cláusula DEFAULT deve ser uma constante. (A única exceção a esta regra é o uso de
CURRENT_TIMESTAMP
como um valor padrão para um TIMESTAMP
coluna.) Como alternativa, você pode usar um TRIGGER para definir um valor para uma coluna quando uma linha é inserida ou atualizada.
Por exemplo, em um gatilho BEFORE INSERT FOR EACH ROW, você pode realizar cálculos a partir de valores fornecidos para outras colunas e/ou consultar dados de outras tabelas.
EDITAR
Para o exemplo dado na EDIT da pergunta, um exemplo de ponto de partida para uma definição de gatilho:
CREATE TRIGGER mytable_bi
BEFORE INSERT ON mytable
FOR EACH ROW
BEGIN
SET NEW.percentage = (100.0 * NEW.marks) / NULLIF(NEW.total_marks,0);
END