postgreSQL 在 select 语句中的 if 语句中声明 var
Posted
技术标签:
【中文标题】postgreSQL 在 select 语句中的 if 语句中声明 var【英文标题】:postgreSQL declare var inside if statement inside select statement 【发布时间】:2014-05-26 18:29:52 【问题描述】:我有一个 mysql 语句需要转换为 postgreSQL,但是当我在 postgreSQL 中运行以下 SQL 时,我得到 ERROR: syntax error at or near ":="
从我发现 := 似乎是在 postgreSQL 中声明 var 的方式。
SELECT memberid, conseq, displayname, foldername, apiloginid, countryid, members.email
FROM ( SELECT MemberID,
Position,
CreateDat,
@r:=IF(@m = MemberID, @r + 1, 1) AS conseq,
@m:= MemberID
FROM memberevents,
(SELECT @r:= 0) r,
(SELECT @m:= 0) m
where position=1
group by eventid
ORDER BY CreateDat DESC
) t, members
where members.id=t.memberid
ORDER BY Conseq DESC
LIMIT 3;
【问题讨论】:
对于它的价值, := 分配给 Postgres 中的值而不是声明它。 【参考方案1】:不需要这样的hack,只需使用窗口函数即可:
SELECT memberid, conseq, displayname, foldername, apiloginid, countryid, members.email
FROM (
SELECT MemberID,
Position,
CreateDat,
row_number() over (partition by memberID order by createDat) as AS conseq
FROM memberevents
where position=1
group by eventid
) t
JOIN members ON members.id=t.memberid
ORDER BY Conseq DESC
LIMIT 3;
我不确定派生表中的group by
,但我不知道 MySQL 如何实际使用派生表中的变量赋值。
【讨论】:
以上是关于postgreSQL 在 select 语句中的 if 语句中声明 var的主要内容,如果未能解决你的问题,请参考以下文章
使用 SELECT 语句查询自定义 postgresql 参数