将MySQL查询转换为Postgres

将MySQL查询转换为Postgres,sql,postgresql,postgresql-9.1,Sql,Postgresql,Postgresql 9.1,我有一个MySQL查询,它非常适合我需要它做的事情。然而,我需要将此转换到postgres安装中,似乎遇到了一些问题。查询如下: SELECT r.studno, r.sdate,r.subject, sum(exam1) as exam1,sum(exam2) as exam2,sum(asgn1) as asgn1,sum(asgn2) as asgn2, sum(proj1) as proj1,sum(proj2) as proj2,sum(pract1) as pract1, s

我有一个MySQL查询,它非常适合我需要它做的事情。然而,我需要将此转换到postgres安装中,似乎遇到了一些问题。查询如下:

SELECT r.studno, r.sdate,r.subject,
  sum(exam1) as exam1,sum(exam2) as exam2,sum(asgn1) as asgn1,sum(asgn2) as asgn2,
  sum(proj1) as proj1,sum(proj2) as proj2,sum(pract1) as pract1, sum(pract2) as pract2,
  r.overallmark, r.result, r.credits, r.corlevel, r.nceaaward, r.gpa, r.overallresult 
FROM exam_results r WHERE r.studno = :studno AND r.sdate = :sdate GROUP BY r.studno, r.subject
我已尝试在postgres中运行此功能,但出现以下错误:

2014-06-23 11:56:54 IST错误:列“r.sdate”必须出现在GROUP BY子句中,或在字符8处的聚合函数中使用


如何解决此问题?

您的查询正在使用MySQL扩展,该扩展允许
select
中的列不在
组中。您可以通过在聚合函数(如
max()
)中包装所有此类列来修复查询:

读一下:;)
SELECT r.studno, r.sdate, r.subject,
       sum(exam1) as exam1,sum(exam2) as exam2,sum(asgn1) as asgn1,sum(asgn2) as asgn2,
       sum(proj1) as proj1,sum(proj2) as proj2,sum(pract1) as pract1, sum(pract2) as pract2,
       max(r.overallmark), max(r.result), max(r.credits),
       max(r.corlevel), max(r.nceaaward), max(r.gpa), max(r.overallresult) 
FROM exam_results r
WHERE r.studno = :studno AND r.sdate = :sdate
GROUP BY r.studno, r.sdate, r.subject;