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的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL SELECT 语句

使用 SELECT 语句查询自定义 postgresql 参数

PostgreSQL UNION 操作符

PostgreSQL UNION 操作符

将表传递给 postgreSQL 函数,执行 select 语句,返回表

PostgreSQL 中的 cursor 和 fetch 是如何工作的