[英]SQL Count(Select) Query
我正在使用sql查詢來執行以下操作:
對於每個項目,檢索項目編號,項目名稱,從事該項目的員工人數。
這是我到目前為止的內容:
select pno, pname,
count(select fname from
employee inner join works_on
on employee.ssn=works_on.essn
inner join project
on works_on.pno=project.pno)
as num_emp from project
這給了我這個錯誤:
1064-您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在第1行“在employee.ssn = works_on.essn inn的員工內部加入works_on中選擇fname”附近使用
我假設這意味着我無法將select語句放入count函數中,但是我看不到該如何做
附件是我的架構
您不需要子查詢
計數(員工ID)並按其他字段分組
使用具有普通聯接和GROUP BY
的COUNT(*)
。
select p.pno, p.pname, COUNT(*) AS num_emp
FROM project AS p
JOIN works_on AS w ON w.pno = p.pno
GROUP BY p.pno
您不需要加入employee
表,因為您沒有使用該表中的任何信息-信息全部在works_on
。
如果您需要包括沒有員工參與的項目,則需要使用左連接。
select p.pno, p.pname, COUNT(w.pno) AS num_emp
FROM project AS p
LEFT JOIN works_on AS w ON w.pno = p.pno
GROUP BY p.pno
在不太可能的情況下,同一項目+員工的works_on
可能有多個條目, works_on
在查詢中使用COUNT(DISTINCT w.essn)
,這樣就不會多次計算它們。
您可以這樣做:
SELECT pno, pname,count(fname) AS Cnt
FROM employee, works_on, project
WHERE employee.ssn=works_on.essn
AND works_on.pno=project.pno
GROUP BY pno,pname
我會這樣做,將您希望員工計數的項目詳細信息分組:
SELECT
pno,
pname,
COUNT(employee.snn) AS num_emp
FROM
project
INNER JOIN
works_on
ON works_on.pno = project.pno
INNER JOIN
employee
ON employee.ssn = works_on.essn
GROUP BY
pno,
pname;
編輯:
實際上,如果要列出未分配員工的項目,則可以通過執行以下操作使原始查詢更正確:
SELECT
pno,
pname,
(
SELECT
COUNT(fname)
FROM
employee
INNER JOIN
works_on
ON employee.ssn = works_on.essn
WHERE
works_on.pno = project.pno
) AS num_emp
FROM
project;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.