首页 > 解决方案 > 我从一个函数返回一个表,然后在另一个查询中使用它

问题描述

问题陈述:我有一个产品表,我想根据某些条件查看哪些产品与输入产品匹配,所以我制作了这样的函数:

-- mapper function
CREATE OR REPLACE FUNCTION selfMapperProducts(input parameters)
    RETURNS TABLE(output parameters) 
    LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE ROWS 1000
AS $BODY$    
BEGIN
    RETURN QUERY SELECT
        DISTINCT ON (channel) channel,sku,title,brand,mrp,price,subtitle, grammage, si, units
    FROM
        products
    WHERE some_condition ORDER BY channel, ABS(price - base_price) ASC;
END;
$BODY$;

当我运行此查询时,这给了我:

select * from selfMapperProducts(input);

输出格式: 在此处输入图像描述

但是当我像这样使用它时:

select * from (select sku, title, selfMapperProducts(input)  products where conditon) as temp;

我明白了:在此处输入图像描述

  1. 我的第一个问题是如何在这里实现相同的列输出?
  2. 我的第二个问题是如何按 sku 和标题对结果进行分组?

所需的输出应如下所示: 在此处输入图像描述

标签: sqldatabasepostgresqlgroup-bydatatable

解决方案


推荐阅读