Vamos por partes:
- El uso de P en lugar de la tabla es porque cuando tienes nombres largos que debes repetir constantemente en los campos usados para consultas, especialmente al usar JOINS, es conveniente el uso de alias, que se declaran en el FROM, sea usando la cláusula AS, como simplemente adjuntando el nombre de alias a continuación. También se pueden declarar los alias en el SELECT para los campos usados (ver este ejemplo).
- Si vas a hacer un JOIN de tablas, las relaciones deben ponerse preferentemente en el FROM a través del JOIN (la coma es su sinónimo) respectivo y con la cláusula ON. Esto es así porque el parser de MySQL
no puede optimizar la lectura de tablas si estas condiciones están el el WHERE, y
sí lo puede hacer si están en el FROM.
- El orden de GROUP BY y ORDER BY es único. Si los pones al revés te dará un error de sintaxis. En tu caso, para lograr lo que quieres, debes hacer uso de una
función agrupada más: MAX().
- El ORDER BY debe contener los campos en el mismo orden en que se espera ordenar. En tu caso hay que ordenar la especie primero, o te las mezclará, y luego el peso. Imagina que es una tabla de Excel. La lógica es la misma.
- Cuando tengas dudas de sintaxis, o quieras saber para qué se usan las cláusulas, o el roden de las mismas, dale una leída al manual de referencia de MySQL. La mayor parte de las respuestas están allí. Ten paciencia para leerlo:
MySQL 5.0 Reference Manual
Código SQL:
Ver originalSELECT DISTINCT
R.id_especie,
R.id_socio,
R.id_pantano,
MAX(R.kg) kg,
R.cm,
R.imajen,
U.usuario_id,
U.nombre_usuario,
P.id,
P.pantano,
E.id,
E.especie,
E.especie
FROM records R
INNER JOIN usuarios U ON R.id_socio = U.usuario_id
INNER JOIN pantano P ON R.id_pantano = P.id
INNER JOIN especies E ON R.id_especie=E.id
GROUP BY R.id_especie
ORDER BY R.id_especie;