The execution for SQL is definitely not the same as Java or C, so often it trips up new programmers getting into the language.
More often than not, the database's order for understanding SQL instructions goes like this:
FROM -> WHERE -> GROUP BY -> ... -> SELECT
In order to do this properly you can't state that something is an alias in the SELECT clause, and expect it to work, because the program would most likely start from the FROM clause.
Also, from my experience, column aliases don't work with each other nicely when referencing each other in the SELECT clause.
My rather unfortunate solution would be to just not use aliases and type the whole thing out.
Also, you absolutely, positively, should not use an aggregate function in the WHERE clause. It must always be in the HAVING clause. You also need to use a GROUP BY clause if you don't want Oracle to complain about asking for the Artist. Also, since you are grouping by the Artist and the other function is an aggregate, you don't need to use DISTINCT.