簡體   English   中英

不同記錄的計數 - SQL

[英]Count of distinct records - SQL

empid   projectId   TaskID
100     500           1
100     501           1
100     502           1
101     500           2
101     500          5
101     500          1
102     400          1
103     300          2
104     300          2
105     300          2  

我試圖根據項目ID列出僅在多個項目上工作的員工。 我試過了distinct和GROUP BY。 但我無法准確地理解它。

從上表我期待這樣的結果

 empid   projectId  
    100     500         
    100     501          
    100     502 

試試這個(修改后的代碼)

SELECT DISTINCT EmpId, ProjectId
FROM TableX
WHERE EmpId IN 
(
    SELECT EmpId
    FROM TableX
    GROUP BY EmpId
    HAVING COUNT (DISTINCT ProjectId) > 1
)

這應該給你

EmpId       ProjectId
----------- -----------
100         500
100         501
100         502

3 row(s)

在評論中編輯為OP附加問題添加的內容

給你一個計算項IDIds的計數意味着GROUP BY將處於EmpId級別並且不需要子查詢

SELECT EmpId, Count (Distinct ProjectId) Projects
FROM TableX
GROUP BY EmpId

要獲得具有多個項目的所有員工的項目計數,請執行以下操作

SELECT EmpId, Count (Distinct ProjectId) Projects
FROM TableX
GROUP BY EmpId
Having Count (Distinct ProjectId) > 1

您還可以使用窗口COUNT()

WITH counted AS (
  SELECT
    empid,
    projectId,
    COUNT(DISTINCT projectId) OVER (PARTITION BY empid) AS ProjectCount
  FROM atable
)
SELECT DISTINCT
  empid,
  projectId
FROM counted
WHERE ProjectCount > 1

參考文獻:

SELECT y.empid, y.projectId
    FROM (SELECT empid
              FROM YourTable
              GROUP BY empid
              HAVING COUNT(*) > 1) t
        INNER JOIN YourTable y
            ON t.empid = y.empid
    ORDER BY y.empid, y.projectId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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