Oracle,内部联接with group by子句

时间:2015-05-26 21:16:52

标签: oracle

我有两个oracle表:

  

用户:ID,USERNAME,PASSWORD,ROLE

     

ARCHIVE_POSESSION:ID,USERID,ARCHIVEID

我要做的是获取一个返回以下结果集的查询:

  

用户名,角色,档案数量

到目前为止一直很好,但我无法绕过查询,我仍然是初学者。到目前为止,这是我得到的地方:

SELECT users.ID, USERNAME, ROLE, count(archive_posession.USERID) 
from users inner join 
archive_posession on 
users.id = archive_posession.USERID 
group by 
archive_posession.USERID ;

但它给了我这个错误

ORA-00979: not a GROUP BY expression

任何提示?我确定group by应该用于聚合函数,但是在这种情况下我被激发了。

2 个答案:

答案 0 :(得分:2)

您选择的字段要么在group by中声明,要么使用aggregate function。 例如

SELECT archive_posession, Max(USERID USERNAME), Max(ROLE), count(archive_posession.USERID) 
FROM users INNER JOIN
archive_posession ON 
users.id = archive_posession.USERID 
GROUP BY 
archive_posession.USERID ;

应该这样做。

解决此问题的原因是因为Group By返回单行。因此,您应该找到一种方法来收集仅在一行中不在分组中的所有选定字段

答案 1 :(得分:1)

在我看来,你正在尝试做类似

的事情
"metadata": {
  # Other metadata
  "enableExternalDirectory": true
}

GROUP BY查询的SELECT列表中的所有列必须是GROUP BY列表的成员,或者必须是聚合函数,例如COUNT。在您的查询中,USERNAME和ROLE不是GROUP BY列表的成员,因此您生成的查询已生成。