Выберите с помощью «Ratio_to_report» в таблице

#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, извините!