#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. Большое вам спасибо! это отлично решило мою проблему!