El tema
no pasa por el EasyPhp o el WampServer (que usa PhpMyAdmin), sino por la
versión del MySQL que tengas instalado y la forma de parsear la consulta.
En cualquier caso, es extraño que el EasyPhp te hubiese dado resultados, a menos que el mismo EasyPhp modificara la consulta al momento de enviarla al MySQL. Es raro, porque de entrada estaba mal escrita.
Veamos los dos detalles:
1. Lo que dice el profesor de los alias
es simplemente una tontería. Puedes poner un alias a cada columna en una consulta de 36 columnas o más, y de todos modos funcionará, porque los alias no intervienen en el problema. Son nada más que suplantadores de nombre de columna (La única singularidad del caso es que el WHERE no los reconoce como nombres de columna, y tampoco se puede hacer lo mismo con el HAVING o usarlos para el GROUP BY si están en una función agregada, a menos que sean de una subconsulta).
2. El mensaje de error te lo dice todo: No se puede usar una función agregada (SUM(), AVG(), MAX(), MIN(), etc.) en una consulta donde una columna no tenga función agregada definida sin usar GROUP BY sobre esa columna.
Esto es porque las funciones de agregación
generan un sólo resultado en una línea, siempre, mientras que esa columna
genera más de uno. MySQL no sabe a qué linea van a corresponder los resultados obtenidos, o si se está pidiendo subtotales. Por eso requiere de la cláusula GROUP BY, para saber sobre qué criterio se realizarán los subtotales.
En tu caso, estás buscando la
suma de facturas emitidas por los vendedores cuyo codigo sea igual a "LEP" (atención: no es que
contenga, has escrito que sea
igual a "LEP", porque no contiene los "%" para que busque los parecidos o que contengan eso).
Eso sería:
Código sql:
Ver originalSELECT
v.Cod_Vend Codigo3,
SUM(f.Monto_Fact) Monto3
FROM Vendedores AS v INNER JOIN Facturas f USING(Num_Fact) INNER JOIN VendFact vf USING(Cod_Vend)
WHERE vf.Cod_Vend LIKE 'LEP';
Detalles:
1. No es buena idea usar "," (equivalente a JOIN) en la vinculación de tablas, a menos que estés seguro que
los campos del mismo nombre en las diferentes tablas contengan
el mismo tipo de dato. Si no es así, MySQL intentará hacer que se relacionen dos campos del mismo nombre entre dos tablas que contendrán datos de diferente tipo... dando lugar a errores.
2.
Es de buen DBA usar INNER JOIN, LEFT JOIN o RIGHT JOIN, ya que son cláusulas que le permiten al MySQL hacer optimizaciones en el parseo.
3. Los "AS" en los alias
son opcionales. No son obligatorios. Se quitó la obligación hace años y se conserva por
compatibilidad con las versiones viejas.
4. Las relaciones entre los campos de dos tablas
no se ponen en el WHERE sino en el FROM, sea usando "ON v.Num_Fact = f.Num_Fact" como USING(Num_Fact). Eso es fundamentalmente porque
el parser de MySQL no puede optimizar lo que hay en el WHERE, pero si puede con lo que hay en el FROM.