Postgres:table 中的函数检查重复项
Postgres: Function check duplicates in table
我 table 有多个副本,我想从这些函数中创建一个函数。你能帮我用这段代码做一个函数吗?谢谢。
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
CREATE OR REPLACE FUNCTION check_for_duplicates()
RETURNS VOID AS
$BODY$
BEGIN
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
END;
$BODY$
LANGUAGE ‘plpgsql‘;
如果一个函数应该 return 一个结果集,它需要被声明为 returns table ()
或 returns setof
您也不需要 PL/pgSQL 函数,一个简单的 SQL 函数就可以,而且效率更高:
CREATE OR REPLACE FUNCTION check_for_duplicates()
RETURNS table (id_member integer, id_service integer, amount numeric, date date, number_of_duplicates bigint)
$BODY$
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
$BODY$
LANGUAGE sql;
您没有向我们展示 table evidence
的定义,所以我不得不猜测列的数据类型。您需要调整 returns table (...)
部分中的类型以匹配 table 中的类型。
话虽如此:我会为这样的事情创建一个视图,而不是一个函数。
无关,但是:date
是一个糟糕的列名称。一方面是因为它也是一个关键字,但更重要的是它没有记录该列包含的内容:发布日期?到期日?预产期?
我 table 有多个副本,我想从这些函数中创建一个函数。你能帮我用这段代码做一个函数吗?谢谢。
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
CREATE OR REPLACE FUNCTION check_for_duplicates()
RETURNS VOID AS
$BODY$
BEGIN
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
END;
$BODY$
LANGUAGE ‘plpgsql‘;
如果一个函数应该 return 一个结果集,它需要被声明为 returns table ()
或 returns setof
您也不需要 PL/pgSQL 函数,一个简单的 SQL 函数就可以,而且效率更高:
CREATE OR REPLACE FUNCTION check_for_duplicates()
RETURNS table (id_member integer, id_service integer, amount numeric, date date, number_of_duplicates bigint)
$BODY$
SELECT id_member,id_service,amount,date, count(*) as number_of_duplicates
from evidence
GROUP BY id_member,id_service,amount,date
HAVING COUNT(*) > 1;
$BODY$
LANGUAGE sql;
您没有向我们展示 table evidence
的定义,所以我不得不猜测列的数据类型。您需要调整 returns table (...)
部分中的类型以匹配 table 中的类型。
话虽如此:我会为这样的事情创建一个视图,而不是一个函数。
无关,但是:date
是一个糟糕的列名称。一方面是因为它也是一个关键字,但更重要的是它没有记录该列包含的内容:发布日期?到期日?预产期?