Я полагаю, MySQL оптимизировал COUNT (*) там, где это совсем не дорого (просто промежуточный итог строк, а не текущий счет); но для более сложной агрегации, такой как COUNT(DISTINCT someField)
, подзапросы часто являются лучшим вариантом.
SELECT author_fname, author_lname
, CASE WHEN myCalc = 1 THEN '1 book'
ELSE CONCAT(myCalc, ' books')
END AS 'No. of books'
FROM (
SELECT author_fname, author_lname, COUNT(*) AS myCalc
FROM books
GROUP BY author_fname, author_lname
) AS q
;
Тем не менее, я не уверен, достаточно ли умен MySQL для выполнения MAX(a+b+c*d)
только один раз если это происходит много раз в одном запросе. Я надеюсь, что это произойдет, и не удивлюсь, что это уже делает; но я никогда не сталкивался с документацией, подтверждающей это.