Postgresql like into if 子句

标签 postgresql if-statement subquery alias sql-like

我得到了这个 PostgreSQL 查询:

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"

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

ERROR:  error de sintaxis en o cerca de «p»
LINE 6:               Sum(IF p LIKE '%add%' AND p NOT LIKE '%add pos...
                             ^
********** Error **********

ERROR: error de sintaxis en o cerca de «p»
SQL state: 42601
Character: 216

这就像引擎无法识别子查询中的“p”别名,但是当我在选择中不再输入“p”时,它工作正常。我究竟做错了什么?

最佳答案

将带有 if 条件的行更改为普通的 case 表达式:

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

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

关于Postgresql like into if 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32619595/

相关文章:

Python:有没有一种方法可以在不使用 if 语句的情况下打印未知范围内的偶数?

sql - Oracle ProC INSERT INTO VALUES ( (选择 ...) )

mysql - 字段列表中的未知列 - 子查询未找到父变量

sql - Count with subquery, group_by 和 Left join

php - Silverstripe 仅创建索引但不创建外键

sql - 如何返回与线串相交的所有多边形?

r - 仅当 R 中条件为真时才打印

ruby-on-rails - 不指向 rails 和 postgres 中的主键的外键?

postgresql - RDBMS 是否如 Hadoop : The definitive guide? 中所述那样糟糕

ruby-on-rails - Haml View 中的 if 条件