У меня есть оператор SELECT, который я просто не могу понять. Запрос выглядит следующим образом:Функция окна в PostgreSQL
SELECT
count(1),
interaction_type_id
FROM
tibrptsassure.d_interaction_sub_type
GROUP BY
interaction_type_id
HAVING
count(interaction_type_id) > 1
ORDER BY
count(interaction_type_id) DESC
LIMIT 5;
Поскольку мое приложение не поддерживает использование LIMIT ключевого слова, я попытался изменить свой запрос, используя функцию rank()
как так:
SELECT
interaction_type_id,
rank() OVER (PARTITION BY interaction_type_id ORDER BY count(interaction_type_id)
DESC)
FROM
tibrptsassure.d_interaction_sub_type;
Однако этот путь я закончилась со следующим сообщением об ошибке:
ERROR: column "d_interaction_sub_type.interaction_type_id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT interaction_type_id, rank() OVER (PARTITION BY inter...
^
********** Error **********
ERROR: column "d_interaction_sub_type.interaction_type_id" must appear in the GROUP BY clause or be used in an aggregate function
SQL state: 42803
Character: 9
есть ли эквивалент rownum()
в PostgreSQL? (Помимо использования ключевого слова LIMIT для достижения того же результата, то есть.)
У кого-нибудь есть предложения для меня? Заранее спасибо.
Что это значит: «Мое приложение * не поддерживает ограничение»? Язык программирования, PostgreSql, ORM? Рассмотрите возможность предоставления демонстрации SQLFiddle и форматирования ваших SQL-команд в качестве источника. – Beryllium
Intelliview Nxt .. Портал, который мы используем для создания отчетов. Это не поддерживает функцию ограничения. – Nancy
Но он * делает * поддержку * окно aggegate функции * (более ... раздел by ...)? Таким образом, вы можете изменить запрос на использование агрегатных функций, но не используя лимит? Другими словами, что вы можете использовать в своем запросе? – Beryllium