2017-03-03 10 views
-1

Ich versuche, die Menge der Arbeiter in einem Projekt in SQL zu erhalten, aber die Gruppe nach einem Teil der Abfrage hat einen Fehler. Ich habe eine separate Tabelle (workersonprojects), die den Projekt-IDs mit den Arbeitern entspricht, die daran arbeiten. Die Abfrage sollte alles + die Anzahl der Arbeiter in einem Projekt auswählen.Warum erhalte ich den Fehler "Kein GROUP BY-Ausdruck"?

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

Da Sie nur Spalten in auswählen können, die in der Gruppe nach Anweisung oder in einer Aggregationsfunktion – Jens

+0

projectID von was? Sie müssen GROUP BY sagen. projects.projectid – hurricane

+1

Die allgemeine GROUP BY-Regel besagt: Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte identifizieren oder das Argument einer set-Funktion sein! – jarlh

Antwort

2

Das liegt daran, dass Sie nicht alle in der Liste enthaltenen Spalten in Ihre group by-Klausel aufnehmen, wie aus Ihrer Abfrage GROUP BY projectid; hervorgeht. Sie sollten Ihre Abfrage wie

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; 
0

Sie verwenden eine Aggregatfunktion: COUNT(). Sie müssen nach allen anderen Spalten als COUNT() gruppieren.

0

Nach anderen Antworten ändern:

SELECT ProjectID, name, developerleader, consultantleader, Projektleiter, Budget, count (workerid) AS Arbeiter aus Projekten workersonprojects JOIN auf (ProjectID = Projekt) JOIN Arbeiter (Arbeiter = workerid) GROUP BY ProjectID, Name, developerleader, consultantleader, Projektleiter, Budget

0

In Gruppe durch Abfrage müssen Sie 'ProjectID' definieren, von denen Tabelle yo Du willst.

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; 
0

Grundsätzlich für GROUP BY-Klausel müssen Sie durch Klausel alle Spalten in der Gruppe umfassen, die innerhalb einer Aggregatfunktion nicht verwendet werden. In diesem Fall haben Sie SELECTED projectid, name, developerleader, consultantleader, projectleader, budget Spalten, aber wir haben nur eine Spalte in der COUNT() Funktion. Also nenne diese Spalten in SELECT Clause und boom hast du eine funktionierende Anfrage.

0

Sie müssen mit allen angegebenen SELECT-Anweisungsattributen gruppieren, also geben Sie alle Attribute an, die Sie in der SELECT-Anweisung auswählen.

Verwandte Themen