Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
select语句中的if语句中的postgreSQL声明变量_Sql_Postgresql_Window Functions - Fatal编程技术网

select语句中的if语句中的postgreSQL声明变量

select语句中的if语句中的postgreSQL声明变量,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我有一个mySQL语句需要转换为postgreSQL,但是当我在postgreSQL中运行以下SQL时,我得到错误:语法错误在或接近:= 根据我的发现:=似乎是在postgreSQL中声明变量的方法 SELECT memberid, conseq, displayname, foldername, apiloginid, countryid, members.email FROM ( SELECT MemberID,

我有一个mySQL语句需要转换为postgreSQL,但是当我在postgreSQL中运行以下SQL时,我得到错误:语法错误在或接近:=

根据我的发现:=似乎是在postgreSQL中声明变量的方法

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;

不需要这样的攻击,只需使用窗口功能:

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;

我不确定派生表中的GROUPBY,因为我不知道MySQL实际上是如何在派生表中使用变量赋值的

对于它的价值,:=赋值给Postgres中的值,而不是声明它。