为什么我会收到错误“不是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; 
+0

因为您只能使用select中的列,它们在Group by Statement或聚合函数 – Jens

+0

projectid中是什么?你需要告诉GROUP BY。 projects.projectid – hurricane

+1

一般的GROUP BY规则说:如果指定了GROUP BY子句,SELECT列表中的每个列引用必须标识一个分组列或者是一个set函数的参数! – jarlh

这是因为您没有在选择列表中包含您的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语句中选择的所有属性。