In the below query, there are repeated calculations such as the three calls to
SUM(p.amount). Does MySQL re-calculate for each function call or is there some kind of memoization optimization under the hood? If not, how can this kind of query be optimized for maximum performance?
It seems like it would be faster after the first calculation to get the next one by the alias name,
total_payemnts, but that just throws an error.
SELECT LEFT(c.last_name, 1) AS 'last_names', SUM(p.amount) AS 'total_payments', COUNT(p.rental_id) AS 'num_rentals', SUM(p.amount) / COUNT(p.rental_id) AS 'avg_pay' FROM customer c JOIN payment p ON p.customer_id = c.customer_id GROUP BY LEFT(c.last_name, 1) ORDER BY SUM(p.amount) DESC;
This query runs on the MySQL Sakila sample database.