What can legally appear in a SELECT list, and why is a subquery there useful?
A SELECT list can contain columns, constants, expressions built from functions and operators, aggregate functions, scalar subqueries and window functions. The useful thing about a scalar subquery is that it lets you add a value to each row that does not exist in that row's table, without changing the row count or the row grain.
That last point is the reason it earns its place. If you write the same thing as a JOIN with a GROUP BY, the query collapses to one row per group. If you write it as a scalar subquery, the outer rows survive intact and each one gains an extra column. When you are enriching a list of rows with context — this customer's total, the customer's rank, the average for their peer group — that is exactly what you want.
Three constraints. The subquery must return exactly one row and one column, or the query fails with a "subquery returns more than one row" error. It must be scalar, so a subquery selecting several columns is rejected here even though the same subquery would be fine in a FROM clause. And if the subquery returns no rows, the value is NULL rather than an error — which is convenient, but it means you have to decide what NULL should display as.
The alias on the subquery's result is not optional in practice. Without it the output column gets an engine-generated name like (SELECT 1), which is unpleasant in a report and breaks any client that reads the result by column name.