Sql 甲骨文;不是按表达式分组;

Sql 甲骨文;不是按表达式分组;,sql,oracle,Sql,Oracle,我的GROUPBY语句中出现oracle错误,我的GROUPBY不是表达式。这似乎在MYSQL中起作用 SELECT pname, PNUMBER, SUM(HOURS) FROM PROJECT, WORKS_ON w, EMPLOYEE e WHERE w.essn=e.ssn AND pnumber=pno GROUP BY PNUMBER; 建议?谢谢它和mySQL不一样,你忘了PNAME SELECT pname, PNUMBER, SUM(HOURS) FROM PROJECT

我的GROUPBY语句中出现oracle错误,我的GROUPBY不是表达式。这似乎在MYSQL中起作用

SELECT  pname, PNUMBER, SUM(HOURS)
FROM PROJECT, WORKS_ON w, EMPLOYEE e
WHERE w.essn=e.ssn AND pnumber=pno
GROUP BY PNUMBER;

建议?谢谢

它和mySQL不一样,你忘了PNAME

SELECT  pname, PNUMBER, SUM(HOURS)
FROM PROJECT, WORKS_ON w, EMPLOYEE e
WHERE w.essn=e.ssn AND pnumber=pno
GROUP BY PNUMBER, **PNAME**;

使用
groupby
时,
SELECT
子句中只允许使用以下表达式*

  • 这些包括在
    分组依据
    列表中,以及
  • 这些函数使用聚合函数
PNUMBER
正常,因为它在
分组依据
列表中
SUM(HOURS)
可以,因为它使用
SUM
聚合器

这就给我们留下了
pname
,两者都不是。根据您试图实现的目标,您需要将其聚合,添加到
分组依据
,或从
选择
列表中排除。

*一些RDBMS放宽了这些规则,但通常情况下,这就是使用
groupby

尝试
groupby PNUMBER,pname来形成查询的方式MySQL允许一些非标准的扩展来分组。这是因为MySQL不遵守ANSI标准。不在聚合函数中的
SELECT
的每一列都需要在
分组依据中列出。另外,在一个不相关的注释中,您应该开始使用显式连接,而不是旧的隐式连接(确切地说:),但是我的英语很差,很难解释。