Как использовать псевдоним в подзапросе в предложении SELECT ? PostgreSQL

#mysql #sql #postgresql #subquery

#mysql #sql #postgresql #подзапрос

Вопрос:

Прежде всего, спасибо за ваше время!

Я перенес свою базу данных из MariaDB в PostgreSQL, и теперь некоторые из моих запросов больше не работают.

Вот пример :

 SELECT DISTINCT table.column AS columnAlias,
          SUM(table2.column)/(SELECT COUNT(table.column) 
                              FROM table 
                              WHERE table.column= columnAlias) 
FROM ...
 

Проблема в том, что этот SQL-запрос хорошо работал, когда моя база данных была базой данных MariaDB, но на самом деле мне пришлось перенести его на PostgreSQL, и теперь он выдает

ERROR: 42703: column "columnAlias" does not exists .

Я думаю, проблема в том, что PostgreSQL не принимает псевдоним в подзапросе, но у вас есть идея, как это исправить? или другой способ выполнить задание?

Спасибо за ваше время,

Гийом.

Комментарии:

1. Ошибка Postgresql здесь соответствует стандарту ANSI / ISO SQL.

2. ... FROM table t2 WHERE t2.column= table.column)

3. @jarlh Я пробовал это решение, но это меняет результат моего запроса, оно возвращает не процент, а только фиксированное значение, которое я не могу преобразовать в процент позже…

4. @RiggsFolly Я обещаю вам, что в моем случае это имеет смысл, но я не могу отправить вам весь запрос с именами реальных таблиц из-за проблем с конфиденциальностью:/ но, спасибо, я добавлю кавычки к своему псевдониму!

Ответ №1:

Вы можете использовать боковое соединение:

 SELECT DISTINCT v.columnAlias,
                SUM(table2.column) / (SELECT COUNT(table.column)
                                       FROM table WHERE table.column= v.columnAlias)
FROM ... CROSS JOIN LATERAL
     (VALUES (table.column)) v(columnAlias)
 

Комментарии:

1. Большое вам спасибо! это отлично решило мою проблему!