Postgresql喜欢进入if子句

时间:2015-09-16 22:07:34

标签: postgresql if-statement subquery alias sql-like

我收到了这个PostgreSQL查询:

git branch --merged

但是当我执行它时,我收到了这个错误:

SELECT Sum(CASE 
                 WHEN p LIKE '%add%' 
                      AND p NOT LIKE '%add post%' THEN counter 
                 ELSE 0 
               end) AS "AGREGAR",
          Sum(IF p LIKE '%add%' AND p NOT LIKE '%add post%' THEN 1 ELSE 0 END IF ) AS P 
    FROM   (SELECT l.action AS p,
                   Count(l.userid) AS counter
                   --r.name 
            FROM   mdl_log AS l 
                   JOIN mdl_role_assignments AS ra 
                     ON l.userid = ra.userid 
                   JOIN mdl_role AS r 
                     ON ra.roleid = r.id 
                   JOIN mdl_course AS c 
                     ON c.id = l.course 
                        AND course = 12033 
                        AND roleid = 3 
            GROUP  BY roleid, 
                      l.action, 
                      r.name 
            ORDER  BY l.action) AS "P"

如果发动机不能识别" p"子查询中的别名,但是当我把" p"在选择中没有了,它工作正常。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

if条件的行更改为正常case表达式:

Sum(CASE WHEN p LIKE '%add%' AND p NOT LIKE '%add post%' THEN 1 ELSE 0 END) AS P 

你应该没事。 if语句用于函数和触发器等中使用的PL / pgSQL语言。