我得到了这个 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/