Hola matias.
O no te estas explicando bien, o estas implementando inadecuadamente las soluciones que tienes.
Código mysql:
Ver originalQuery OK, 0 rows affected (0.06 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
+-----------+---------+----------+--------+----------+
| codventa | codpro | cantidad| precio_com|sucursal |
+-----------+---------+----------+--------+----------+
| 12 | 1 | 2 | 125 | A |
| 18 | 1 | 1 | 125 | A |
| 19 | 1 | 1 | 65 | A |
| 20 | 1 | 1 | 125 | A |
| 21 | 1 | 1 | 75 | A |
+-----------+---------+----------+--------+----------+
mysql
> SELECT (sum(t1.precio_com
*t1.cantidad
) / sum(t1.cantidad
)) as promedio
+----------+
| promedio |
+----------+
| 106.6667 |
+----------+
Si no estoy mal, es la salida que quieres, con los datos que tienes, con el producto y venta que tienes.
Espero te sirva.
PD: Cuando jurena se refiere a dcv y t1 son los alias que pone a las tablas para un manejo mas limpio de los campos que requieres de cada una de las tablas. En este caso, el resultado de una consulta se simula como la existencia de una tabla. dcv es la tabla original y t1 es la tabla simulada con la consulta.
Un saludo.