使用列值的函数参数..我可以在PostgreSQL这样做吗?



所以我现在使用PostgreSQL,我目前有一个表,是用以下函数创建的:

CREATE TABLE summaryTable AS (
SELECT d.name, d.store_id, d.rental_id
FROM detailedTable AS d
GROUP BY d.store_id, d.name
ORDER BY d.name ASC
) 

我还编写了一个函数,该函数以电影类型作为参数,并返回在DB中找到的次数。我想使用这个函数的结果,并将它们添加到上面所示表中的新列中。但是参数将来自上面表格中的d.name。当运行SELECT * FROM summaryTable时,我们看到如下表(请记住,这只是表的一部分)https://i.stack.imgur.com/DsCsA.png我想编写一个函数,使用第一行第一列的值作为参数,计算该类型在summaryTable中出现的次数,并返回一个包含类型名称的表,以及它在存储1中出现的次数和在存储2中出现的次数。

下面的函数是我想到的,但它不满足我想做的,只是认为它可能有助于理解…

CREATE OR REPLACE FUNCTION countGenre (genre varchar)
RETURNS integer AS $totals$
DECLARE totals integer;
BEGIN
SELECT COUNT(d.name) INTO totals
FROM detailedTable AS d
WHERE d.name = genre AND d.store_id = 1
GROUP BY d.name;
RETURN totals;
END; $totals$
LANGUAGE plpgsql;

那么最终的结果看起来会像这样https://i.stack.imgur.com/Cpbzm.png

任何帮助都是感激的。谢谢!

数据的结构对我来说是不清楚的(请提供下次完整的表定义),但你不需要有一个函数来做计数,只是子查询。

首先,您必须清楚地定义要计数的内容,因为函数现在计数store_id = 1中所有出现的name。在你提到的评论中,它应该计算不同的retail_id,无论商店(或者可能在每个商店?)。

如果summaryTable已经存在并且添加了额外的字段,那么它可以通过子选择或函数来更新

update summaryTable
set aggregated_count = (
select count(distinct retail_id) 
from detailedTable 
where detailedTable.name = summaryTable.name)
update summaryTable
set aggregated_count =    countGenre(name)

相关内容

最新更新