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!