簡體   English   中英

SQL計數(選擇)查詢

[英]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函數中,但是我看不到該如何做

附件是我的架構

ER圖

您不需要子查詢

計數(員工ID)並按其他字段分組

使用具有普通聯接和GROUP BYCOUNT(*)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM