• Где ошибка в запросе sql?

    Snakecharmer
    @Snakecharmer
    Я бы посоветовал прежде всего документацию. Без нее никуда, ведь это официальное руководство. По ссылке вы можете почитать что об этом пишет сам Postgres: в подразделе "Описание" 4-ым пунктом идет GROUP BY и HAVING. А вот SELECT уже 5-ый.

    Ну и вот, конкретная цитата:

    По имени выходного столбца можно обратиться к его значению в предложениях ORDER BY и GROUP BY, но не в WHERE или HAVING; в них вместо имени надо записывать всё выражение.

    Если документация сразу не дается (сухо, много подробностей), то можете тогда почитать учебник Е. Моргунова. Это пособие создано при участии российской компании Postgres Professional. На странице 176 (раздел 6.4. Подзапросы) есть то, что вам нужно.

    Если нужна более сложная литература, то "Оптимизация запросов PostgreSQL"(Домбровская, Новиков, Бейликова).

    Почитайте документацию других популярных СУБД. У них ситуация с HAVING может отличаться. Если в Microsoft SQL Server'е логический порядок обработки инструкции SELECT тоже предполагает, что HAVING выполняется до вычисления значений в SELECT, то в MySQL же, ситуация другая:

    The SQL standard requires that HAVING must reference only columns in the GROUP BY clause or columns used in aggregate functions. However, MySQL supports an extension to this behavior, and permits HAVING to refer to columns in the SELECT list and columns in outer subqueries as well.

    Возможность ссылаться в HAVING на поля из выражения SELECT - это расширение языка SQL, реализованное в MySQL. Потестировать можете сами на любом фиддле, например здесь.