Фильтр вложенной таблицы в представлении sql - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь создать представление на основе этого запроса

with fields as (
    select id, data_id, value
    from test
    where data_id in (123, 345)
),
counted as (
    SELECT id, data_id, sum(meta.count) as count
    FROM fields
    LEFT JOIN meta ON meta.field_id = fields.id 
    group by data_id, meta.field_id, value
)

SELECT id, data_id, count
FROM (
    SELECT id, data_id, count,
    RANK() OVER (PARTITION BY data_id ORDER BY count DESC) dest_rank
    FROM counted
) t
WHERE dest_rank = 1

Однако where data_id in (123, 345) должен быть пользовательским, поэтому я могу написать SELECT * from my_view where data_id in (123, 345) или с помощью JOIN, например

SELECT * FROM another_table LEFT JOIN my_view ON my_view.data_id = another_table.data_id

Каков наилучший способ достичь этого?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы можете создать функцию с вашими пользовательскими значениями в качестве параметров:

CREATE OR REPLACE FUNCTION my_function (a int, b int)
RETURNS TABLE(id int, data_id int, count int) AS $$
    with fields as (
        select id, data_id, value
        from test
        where data_id in ($1, $2)
    ),
    ... 
$$ LANGUAGE SQL;

И тогда вы могли бы сделать этот запрос:

SELECT my_function(123, 456);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...