我有这样的查询
CREATE FUNCTION getVisitChartByClient(date_from DATE, date_to DATE, statusname TEXT, club_uuid TEXT)
RETURNS TABLE(date date, entries bigint) AS $$
DECLARE
ids UUID[];
BEGIN
ids = string_to_array(club_uuid,',');
RETURN QUERY SELECT d.date, count(v.id) AS entries
FROM (SELECT i::date AS date
FROM generate_series(date_from, date_to, '1 day'::interval) i
) d
LEFT JOIN (
SELECT v.created_at, v.id FROM visit AS v
LEFT JOIN club AS c ON v.club_id= c.id
AND status = statusname
AND c.uuid = ANY(ids)
GROUP BY v.id
) AS v
ON d.date = v.created_at::date
GROUP BY d.date
Order By d.date ASC;
END;
$$ LANGUAGE plpgsql;
但有时我不想传递状态名称或俱乐部 ID,如何在查询中使用 IF ELSE 语句,或者如何创建查询然后执行?
最佳答案
尝试:
AND status = coalesce(statusname,status)
和
AND case when club_uuid is null then then true else c.uuid = ANY(ids) end
所以:
RETURN QUERY SELECT d.date, count(v.id) AS entries
FROM (SELECT i::date AS date
FROM generate_series(date_from, date_to, '1 day'::interval) i
) d
LEFT JOIN (
SELECT v.created_at, v.id FROM visit AS v
LEFT JOIN club AS c ON v.club_id= c.id
AND status = coalesce(statusname,status)
AND case when club_uuid is null then then true else c.uuid = ANY(ids) end
GROUP BY v.id
) AS v
ON d.date = v.created_at::date
GROUP BY d.date
Order By d.date ASC;
当然,您需要将 NULL 传递给函数而不是“正常”值
关于sql - if else 带参数的 postgres 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44068025/