First of all, please correct me if "alias" is the wrong word. I am talkin about renaming the column with AS
operator.
So I'm trying calculate an average like this :
SELECT
users.username AS player_name,
COUNT(*) AS total_games,
SUM(games.points) AS total_points,
(total_points / total_games) AS average_points
FROM games,
INNER JOIN users
ON games.player_id = users.id
GROUP BY games.player_id
(the query might be wrong, its just a quick example)
in this query, the line
(total_points / total_games) AS average_points
gives an error : unknown column total_points
so how can I fix this to keep using the aliases, instead of writing this :
(SUM(games.points) / COUNT(*) ) AS average_points
Thanks for any help !
I'm fairly sure it's not possible to use aliases like that. You will have to do it the 'long' way...
Edit: I wanted to edit this answer to second @jbeldock 's answer as a solution I have since used many times myself. I found myself writing out formulas and re-using them in other parts of queries, leading to big messy queries with copy/pasted sections. Putting your forumlas in a subquery allows you to use their results in the outer query and make things more elegant.
You can't use aliases at the same level they are defined -- you need to put the alias definition in a subquery. But, you don't need aliases, because SQL has the
AVG()
function:Unfortunately, you cannot use column aliases this way. They are only available after the
SELECT
statement is processed. However, you can do it in a subquery or a common table expression (CTE). Here is the simple subquery: