Semplicemente, tu vuoi fare in una sola query due aggregazioni diverse: questo è semplicemente impossibile.

Mi sorge però spontaneo un quesito: ma non è che per caso entrambe le tue richieste riguardano gli oggetti su cui A ha fatto almeno un'offerta?

Se così fosse dovresti prima di tutto trovare questi oggetti, usarli come filtro sulle offerte e quindi trovare l'offerta massima per ciascuno di essi.

Dopodichè, quando leggi i dati restituiti da questa query, non è difficile inserire in un array i nomi degli oggetti, evitando di inserirli se doppi; questo array sarà la lista dei nomi degli oggetti su cui A ha fatto un'offerta.

Per capirci:

select distinct idoggetto from offerte where idutente=a

Sono tutti gli oggetti su cui A ha fatto un'offerta.

select * from offerte where idoggetto in (select distinct idoggetto from offerte where idutente=a)

Sono tutte le offerte per oggetti su cui A ha fatto almeno un'offerta.

select max(prezzo), idoggetto from (select * from offerte where idoggetto in (select distinct idoggetto from offerte where idutente=a)) AS offerte GROUP BY idoggetto

Sono i prezzi massimi offerti per gli oggetti su cui A ha fatto un'offerta.

select max(prezzo), idoggetto, oggetti.nome from (select * from offerte where idoggetto in (select distinct idoggetto from offerte where idutente=a)) AS offerte left JOIN oggetti on idoggetto=oggetti.id GROUP BY idoggetto

Aggiunge una join per leggere dalla tabella oggetti il nome dell'oggetto, così da poter usare la tecnica dell'array di nomi oggetti che ti indicavo sopra.

Ciao!