Vous pouvez vous joindre à une table dérivée qui contient la valeur agrégée pour chaque groupement de b
select * from mytable t1
join (
select avg(a), b
from mytable
group by b
) t2 on t2.b = t1.b
ou en utilisant une sous-requête
select *, (select avg(a) from mytable t2 where t2.b = t1.b)
from mytable t1
la question est étiquetée à la fois mysql et psql, donc je ne sais pas quelle base de données vous utilisez. Mais sur postgres, vous pouvez utiliser les fonctions de fenêtre
select *, avg(a) over (partition by b)
from mytable