No. El valor de la cláusula DEFAULT debe ser una constante. (La única excepción a esta regla es el uso de CURRENT_TIMESTAMP
como valor predeterminado para un TIMESTAMP
columna.)
Como alternativa, puede usar un TRIGGER para establecer un valor para una columna cuando se inserta o actualiza una fila.
Por ejemplo, dentro de un activador ANTES DE INSERTAR PARA CADA FILA, puede realizar cálculos a partir de valores proporcionados para otras columnas y/o consultar datos de otras tablas.
EDITAR
Para el ejemplo dado en la EDICIÓN de la pregunta, un ejemplo de punto de partida para una definición de activación:
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