Arrays PLpgSQL:将每条记录存储在For循环中并返回json
我试图将记录或json存储到数组中,并从函数返回json:Arrays PLpgSQL:将每条记录存储在For循环中并返回json,arrays,json,postgresql,plpgsql,Arrays,Json,Postgresql,Plpgsql,我试图将记录或json存储到数组中,并从函数返回json: CREATE OR REPLACE FUNCTION stat_per_day() RETURNS json AS $$ DECLARE RR RECORD; SS json[]; BEGIN FOR RR IN (SELECT DISTINCT date FROM timetable WHERE date<CURRENT_DATE ORDER BY date ASC) LOOP SELECT ro
CREATE OR REPLACE FUNCTION stat_per_day() RETURNS json AS $$
DECLARE
RR RECORD;
SS json[];
BEGIN
FOR RR IN (SELECT DISTINCT date
FROM timetable WHERE date<CURRENT_DATE ORDER BY date ASC)
LOOP
SELECT row_to_json(A) INTO SS FROM (SELECT RR.date as Dia, count(*) Total
FROM dates WHERE office_date=RR.date) A;
END LOOP;
RETURN json_agg(SS);
END; $$
LANGUAGE plpgsql;
查询稍微复杂一点,但想法是将每个forloop查询保存在我认为不存在的json数组或记录数组中,循环后,从数组返回一个完整的json。是否不需要循环?此任务可以使用json_build_对象函数完成,类似于:
CREATE OR REPLACE FUNCTION stat_per_day() RETURNS json AS $$
DECLARE
SS json;
BEGIN
select json_agg(j order by (j->>'dia')::date) from (
SELECT json_build_object('dia', office_date, 'Total', count(*) ) as j
from dates
where
office_date in (SELECT date FROM timetable WHERE date<CURRENT_DATE)
group by office_date
) t
into SS;
RETURN SS;
END; $$
LANGUAGE plpgsql;
也许你不需要循环?此任务可以使用json_build_对象函数完成,类似于:
CREATE OR REPLACE FUNCTION stat_per_day() RETURNS json AS $$
DECLARE
SS json;
BEGIN
select json_agg(j order by (j->>'dia')::date) from (
SELECT json_build_object('dia', office_date, 'Total', count(*) ) as j
from dates
where
office_date in (SELECT date FROM timetable WHERE date<CURRENT_DATE)
group by office_date
) t
into SS;
RETURN SS;
END; $$
LANGUAGE plpgsql;