Вы не можете использовать псевдонимы из SELECT в том же SELECT, псевдонимы из SELECT подзапроса могут использоваться во внешнем запросе. Я не уверен, оптимизирует ли MySQL несколько идентичных выражений COUNT за один выбор, но я бы на это надеялся.
Когда меня по-настоящему беспокоило то, что одно и то же выражение нужно дважды, и возможные последствия для производительности его повторения (или, чаще, влияния на читаемость / поддержание устойчивости повторяющихся длинных выражений), я обнаружил, что поворот " main "запрос в подзапрос, и использование псевдонима несколько раз в запросе переноса, чтобы быть полезным.
В общем виде, как-то так
SELECT stuff, long_equation AS r1, long_equation_with_extra_operations AS r2 FROM tables
становится
SELECT mainQ.*, r1_with_extra_operations AS r2
FROM (SELECT stuff, long_equation AS r1 FROM tables) AS mainQ
В конкретном случае этого вопроса, применение вышеупомянутой тактики будет следующим:
SELECT my_count, GREATEST(my_count, 7)
FROM (SELECT COUNT(*) AS my_count ....) AS mainQ
Примечание: подзапрос, очевидно, должен будет включать в себя любые поля, используемые в части «дополнительные операции», поэтому в зависимости от специфики исходного запроса эта тактика не всегда возможна или, по крайней мере, может быть не столь простой в использовании.
(GREATEST
в выражении SELECT должно оказывать очень незначительное влияние на производительность; это эквивалентно CASE WHEN a IS NULL OR b IS NULL THEN NULL WHEN a > b THEN a ELSE b END
. Однако использование его в предложении WHERE или ON может значительно снизить производительность, поскольку MySQL не может использовать преимущества индексы на полях в таких случаях.