#sql #postgresql
#sql #postgresql
Вопрос:
я хочу выбрать соотношение общей цены или id_программу, созданную id_lot: вот таблица :
id_lot | id_programme | surface | prix
-------- -------------- --------- ------
101 | 1 | 30 | 180
201 | 1 | 30 | 185
391 | 2 | 40 | 145
я попробовал это :
select id_lot,id_programme ,
ratio_to_report(sum(prix)) over(partition by id_programme) as
ratio
from t
group by id_lot,id_programme;;
и я получаю эту ошибку :
выберите id_lot, id_programme ,ratio_to_report(sum(prix)) поверх(… ^ ПОДСКАЗКА: ни одна функция не соответствует заданному имени и типам аргументов. Возможно, вам потребуется добавить явные приведения типов.
Комментарии:
1. Ваш код работает, когда я пытаюсь это сделать: dbfiddle.uk /. … Ваша ошибка не похожа на ошибку Oracle. Вы уверены, что используете Oracle?
2. Сообщение об ошибке больше похоже на Postgres. Используете ли вы Postgres, а не Oracle?
3. я использую psql
4. @SaraStone . , , Это может сбить с толку. «psql» — это интерактивный интерфейс для Postgres. «plsql» — это язык сценариев для Oracle. «pgsql» или «plpgsql» — это язык сценариев для Postgres. Я исправил ваш тег.
Ответ №1:
Вы можете явно выполнить вычисление для ratio_to_report()
. Работает ли это?
select id_lot, id_programme,
sum(prix) / sum(sum(prix)) over (partition by id_programme) as ratio
from t
group by id_lot, id_programme;
Вот скрипка db<> с использованием Postgres.
Комментарии:
1. правильно! и я тоже благодарю вас, так что, если я его получу, ratio_to_report находится на Oracle и iw, как на postgres sql, извините!