Und ich weiß nicht, warum du die beste Erfindung seit es SQL gibt, den join lateral, immer noch nicht magst.
Weil er in den Beispielen, die du hier anführst völlig überflüssig ist.
Es ist ja nicht so, dass ich den LATERAL nicht verwende, aber nur dann wenn er notwendig ist, z.B. wenn eine Tabellen-Funktion aufgerufen wird und diese als Parameter Werte aus der ersten Tabelle benötigt. In diesem Fall muss LATERAL verwendet werden aber ansonsten nicht.

Ansonsten weiß ich nicht was Du gemessen bzw. verglichen hast. Die folgenden Beispiele liefern alle das gleiche Ergebnis. Die Varianten ohne LATERAL werden identitsch optimiert (ohne Aggregation nur über Hashes), während die Lösung mit Lateral zwei zusätzliche CACHEs und eine Aggregation erfordert, was selbst bei diesen kleinen Daten lt. Visual Explain 0.02 Sekunden kostete.
Code:
select x.f1, x.f2
       ,c.*
   from x
 cross Join lateral (Select 
                      Count(*) Count1
                     ,sum(W1) Wert1
                     ,avg(W2) Wert2
                     From x a
                    where a.F1 = x.F1   
                   ) c;

Code:
Select x.F1, X.F2, c.*
  from x join (Select F1, Count(*) Count1, Sum(W1) Wert1, Avg(W2) Wert2
                 from x
                 Group by F1) c
               on x.F1 = c.F1;
Code:
With c as (Select F1, Count(*) Count1, Sum(W1) Wert1, Avg(W2) Wert2
             from x
             Group By F1)
Select x.F1, X.F2, c.*
  from x join c on x.F1 = c.F1;