он, или, может, он есть в других СУБД), когда алиас можно тут же повторно использовать? Например, вместо
SELECT COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'done') AS done,
COUNT(*) FILTER (WHERE status = 'done') / COUNT(*) AS percent
Можно было бы написать
SELECT COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'done') AS done,
done / total AS percent
можешь попробовать cte или подзапрос использовать. в других субд, вроде, так же.
да, но объемно получается и непонятно, почему нельзя сделать так, чтобы алиас подставлялся
я думаю,это связано с порядком выполнения и планирования запроса. что-нибудь вроде, что он сначла проверяет наличие полей, а потом посваивает им алиасы. но это не точно. тут есть типы, которые тебе точно скажут. погоди, может не проснулись еще
Не понятно, потому что это просто и вы это умеете реализовать? Или не понятно, потому что вы вообще не в курсе как работает волшебство SQL?
Вложенные SELECT
> почему нет функционала Потому что, насколько я помню, такое поведение предписано в ISO SQL. > или, может, он есть в других СУБД В Amazon Redshit, например: https://stackoverflow.com/a/59335141 (ссылка сразу с проблемами такого подхода). > почему нельзя сделать так, чтобы алиас подставлялся Собственно, пример выше демонстрирует две причины, почему это, эээ... не совсем прекрасная идея. ;) > Было бы читабельнее Если придумать, как решить проблемы выше (особенно с неоднозначностью ссылки — это уж совсем неприятная ловушка, особенно в реализации redshit) — я согласен. Но, пока этого нет в ISO SQL, в PostgreSQL мы это вряд ли увидим...
Обсуждают сегодня