Razer:
Tengo esta situación:
SELECT uf.*, SUM(uto.points) AS total_points_live,
SUM(utl.points) AS total_points_online,
(total_points_live + total_points_online) AS total_points
FROM users AS uf
LEFT JOIN users_tourney_online AS uto
ON uto.id_users = uf.id
LEFT JOIN users_tourney_live AS utl
ON utl.id_users = uf.id
GROUP BY uf.id ORDER BY total_points DESC
Pero no funciona porque los alias no se pueden utilizar.
¿Me puedes ayudar?
Saludos,
GMB:
No se puede utilizar un alias definido en la misma SELECT
cláusula se define.
Usted tendría que repetir la expresión:
SUM(uto.points) + SUM(utl.points) AS total_points
Si las SUM
s pueden ser NULL
:
COALESCE(SUM(uto.points), 0) + COALESCE(SUM(utl.points), 0) AS total_points
Alternativamente, se puede utilizar una subconsulta:
SELECT t.*, coalesce(total_points_live, 0) + coalesce(total_points_online, 0) total_points
FROM (
SELECT uf.*, SUM(uto.points) AS total_points_live, SUM(utl.points) AS total_points_online
FROM ...
GROUP BY uf.id
) t
ORDER BY total_points desc
Nota sin relación: GROUP BY
y SELECT *
no ir a lo largo de bien juntos; es una buena práctica para enumerar todas las columnas no agregados en la GROUP BY
cláusula (aunque MySQL es algo flojo sobre él).