sql - if else 带参数的 postgres 过程

标签 sql postgresql stored-procedures plpgsql

我有这样的查询

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/

相关文章:

sql - cakephp 复杂查询多个 'OR' 条件

postgresql - 是否可以将对 postgresql 数据库的查询转换为 geopackage 文件

sql - 如何计算 postgresql 中每月重复事件的差距

mysql - SQL语句中的临时变量

sql-server - 在 Sql Azure 中收到错误 "Could not find stored procedure ' sp_OACreate'"

mysql - SQL 迁移。保留旧 ID 无效

sql - 动态创建表来存储用户内容是个好主意吗?

程序流程的SQL proc图生成软件

postgresql 将新行作为 json 触发

sql - SQL选择一行并存储在SQL变量中