为什么我会收到错误“不是GROUP BY表达式”?
我试图获得一个项目在SQL中的工作量,但由部分查询组有一些错误。我有一个单独的表(workersonprojects),它与工作项目ID相匹配。查询应该选择所有内容+一个项目上的工作人员数量。为什么我会收到错误“不是GROUP BY表达式”?
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;
这是因为您没有在选择列表中包含您的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;
您在使用聚合函数:COUNT()
。您必须按COUNT()
以外的所有其他列进行分组。
根据其他答案:
SELECT专案编号,名称,developerleader,consultantleader,projectleader,预算,计数(workerid)工人 从上 JOIN workersonprojects项目(专案编号=项目) 通过查询JOIN上(工人= workerid) GROUP BY专案编号,名称,developerleader,consultantleader,projectleader,预算
工人组你必须定义 '专案编号',这表哟你想。
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;
基本上对于Group BY子句,您需要在Group by子句中包含所有不在任何Aggregate Function中使用的列。在这种情况下,您有SELECTED投影,名称,developerleader,consultantleader,projectleader,预算列,但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 Statement或聚合函数 – Jens
projectid中是什么?你需要告诉GROUP BY。 projects.projectid – hurricane
一般的GROUP BY规则说:如果指定了GROUP BY子句,SELECT列表中的每个列引用必须标识一个分组列或者是一个set函数的参数! – jarlh