Sql 为什么我会犯错误;不是通过表达式“分组”吗;?
我试图用sql获取项目中的工作人员数量,但查询的group by part有一些错误。我有一个单独的表(workersonprojects),它将项目id-s与处理它的工人相匹配。查询应选择所有内容+一个项目的工人数量Sql 为什么我会犯错误;不是通过表达式“分组”吗;?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我试图用sql获取项目中的工作人员数量,但查询的group by part有一些错误。我有一个单独的表(workersonprojects),它将项目id-s与处理它的工人相匹配。查询应选择所有内容+一个项目的工人数量 SELECT projectid, name, developerleader, consultantleader, projectleader, budget, count(workerid) AS workers FROM projects JOIN workersonpro
SELECT projectid, name, developerleader, consultantleader, projectleader, budget, count(workerid) AS workers
FROM projects
JOIN workersonprojects on (projectid=project)
JOIN workers on (worker=workerid)
GROUP BY projectid;
您正在使用聚合函数:
COUNT()
。您必须按COUNT()
以外的所有列进行分组,这是因为您没有将select列表中的所有列都包含到group by
子句中,这可以从查询group by projectid中看到代码>。您应该像这样更改查询
SELECT p.projectid,
name,
developerleader,
consultantleader,
projectleader,
budget,
xxx.workers
FROM projects p
JOIN workersonprojects wp on p.projectid= wp.project
JOIN workers w on p.worker= w.workerid
JOIN (select projectid, count(workerid) AS workers
FROM projects
GROUP BY projectid ) xxx ON p.projectid = xxx.projectid;
根据其他答复:
选择projectid、name、developerleader、consultantleader、projectleader、budget、count(workerid)作为工作人员
来自项目
在(projectd=project)上加入Workerson项目
在上加入工人(工人=工人ID)
分组依据projectid、姓名、developerleader、consultantleader、projectleader、预算在分组依据查询中,您必须定义所需表的“projectid”
SELECT workersonprojects.projectid, projects.name,
projects.developerleader, projects.consultantleader, projects.projectleader,
projects.budget,
count(workersonprojects.workerid) AS workers
FROM projects
JOIN workersonprojects on
(workersonprojects.projectid=projects.projectid)
JOIN workers on (workers.worker=workersonprojects.workerid)
GROUP BY workersonprojects.projectid;
基本上,对于GROUPBY子句,您需要包括GROUPBY子句中未在任何聚合函数中使用的所有列。在本例中,您选择了projectid、name、developerleader、consultantleader、projectleader、budget列,但COUNT()函数中只有一列。所以在SELECT子句中包含这些列,这样您就有了一个有效的查询
SELECT projectid,
name,
developerleader,
consultantleader,
projectleader,
budget,
COUNT(workerid) AS workers
FROM projects
JOIN workersonprojects
ON (projectid=project)
JOIN workers
ON (worker=workerid)
GROUP BY PROJECTID,
name,
developerleader,
consultantleader,
projectleader,
budget;
您必须使用所有给定的select语句属性按分组,因此请给出select语句中选择的所有属性。因为您只能使用select中的列,这些列位于group by语句或聚合函数PROJECTID中的什么?你需要告诉小组。projects.projectd常规GROUP BY规则规定:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识分组列或是集合函数的参数@jarlh:“常规”规则(如:SQL标准)将其扩展到:或所有非分组列的功能依赖于分组列。但不幸的是,Oracle不支持that@a_horse_with_no_name,大多数数据库管理系统不支持它。如果你遵循我的“一般规则”,你永远不会出错!