не, я предлагал примерно так
select ...
from smartphone, (select max(`price` -`price` / 100 * `sale`) `pmax` from smartphone) sq
where price <= pmax
по сути здесь то же самое как и в варианте с WITH
понятно, что подзапрос внутри where может быть хреновым, если оптимизатор не догадается его только один раз вычислить.