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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.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
如何修复将MySQL转换为PostgreSQL时GROUPBY子句上的语法错误_Postgresql_Postgresql 9.3 - Fatal编程技术网

如何修复将MySQL转换为PostgreSQL时GROUPBY子句上的语法错误

如何修复将MySQL转换为PostgreSQL时GROUPBY子句上的语法错误,postgresql,postgresql-9.3,Postgresql,Postgresql 9.3,我正在将一系列从MySQL到PostgreSQL的查询转换为在特定Moodle实例上运行。无论如何,我对这两种语言都不是专家,这让我很难理解为什么PostgreSQL会在我的GROUPBY子句上抛出语法错误。如何正确创建GROUPBY子句 我已经看过关于StackOverflow的其他答案,其中提到GROUPBY子句需要列出SELECT语句中的所有列。我已经将其他列添加到GROUPBY子句中,请参见下面注释掉的代码。然而,同样的问题仍然存在 这是在Moodle应用程序数据库结构上的SQL报表工具

我正在将一系列从MySQL到PostgreSQL的查询转换为在特定Moodle实例上运行。无论如何,我对这两种语言都不是专家,这让我很难理解为什么PostgreSQL会在我的GROUPBY子句上抛出语法错误。如何正确创建GROUPBY子句

我已经看过关于StackOverflow的其他答案,其中提到GROUPBY子句需要列出SELECT语句中的所有列。我已经将其他列添加到GROUPBY子句中,请参见下面注释掉的代码。然而,同样的问题仍然存在

这是在Moodle应用程序数据库结构上的SQL报表工具中运行的,如下所示:

-有效的MySQL查询。此查询选择课程名称,统计过去12个月内访问该课程的次数,如果该课程是可见课程,则将其显示在表中。 选择c.fullname、countcourse AS actions、course AS courseid、c.visible AS visibility 从前缀_log l,前缀_course c 其中l.course=c.id c.visible=1 以及unix\u timestampdate\u subNow(间隔12个月)和unix\u timestampNow之间的时间 和c.id!=1. 按课程分组 按动作排序说明 -postgreSQL转换尝试 选择c.fullname、countcourse AS actions、course AS courseid、c.visible AS visibility 从前缀_log l,前缀_course c 其中l.course=c.id c.visible=1 和extractepoch from NOW介于extractepoch from NOW-间隔“12个月”和to_dateNOW::TEXT之间 和c.id!=1. 按课程分组 -查询失败 - -错误:组处或附近的语法错误 -第7行:按课程分组 - ^ -使用“按课程分组,操作,c.fullname,c.visible”子句时: -查询失败 - -错误:组处或附近的语法错误 -第8行:按课程、操作分组,c.fullname,c.visible - ^ 按动作顺序描述 我希望我从MySQL到PostgreSQL的转换尝试是有效的,并返回过去12个月内活动课程的列表,但我无法验证我的转换尝试

编辑:解决方案 @Jeremy注意到我在WHERE语句中的12个月条款中缺少了一个右括号。我还修复了代码中的一些小错误——请参见下文

选择c.fullname作为CourseName,COUNTcourse作为actions,courseid作为courseid,c.visible作为visibility 从前缀_log l,前缀_course c 其中l.course=c.id c.visible=1 以及从现在起的extractepoch介于从现在起的extractepoch之间-间隔“12个月”和从现在起的extractepoch 和c.id!=1. 按课程分组,c.全名,c.可见 按动作顺序描述
此行缺少右括号:

AND extract(epoch from NOW()) BETWEEN extract(epoch from NOW()- INTERVAL '12 months') AND to_date(NOW()::TEXT
这也没有任何意义,但语法错误是对缺少的右括号造成的


现在永远是从现在到12个月前。现在转换为文本和转换为日期充其量只是一个额外的步骤,但很明显,在这之后,您缺少了一些逻辑。

MySQL说?您使用的是MS SQL还是MySQL?@mjwills,哦,您是对的!我的道歉-我这方面的一个简单的打字错误。然而,问题仍然是一样的。我已经更新了我的原始注释和标题,现在用MySQL替换MSSQL。编辑:现在我已经指定了要转换的正确SQL语言;是的,就我有限的SQL知识而言,此查询工作正常。仅供参考,根据,无论使用何种SQL语言,db模式都是相同的,因为它是基于此。哦,很好的介绍!最后总是括号把我吸引住了。我还注意到我使用了一个旧的tou_date函数,这个函数在Moodle的这个特定版本中不受支持,我用提取历元提取方法代替了它。