开发者

Count of distinct records - SQL

开发者 https://www.devze.com 2023-04-10 14:22 出处:网络
empidprojectIdTaskID 1005001 1005011 1005021 1015002 1015005 1015001 1024001 1033002 1043002 1053002 I am 开发者_JAVA技巧trying to list the employees who works on multiple project only,based on proj
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  

I am 开发者_JAVA技巧trying to list the employees who works on multiple project only, based on project id . I tried distinct and GROUP BY . but am not able figure it exactly.

from the above table am expecting a result like this

 empid   projectId  
    100     500         
    100     501          
    100     502 


Try this (revised code)

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

This should give you

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

3 row(s)

Edit Content added for OPs additional question in the comments

A count giving you distint ProjectIds would mean that the GROUP BY would be at an EmpId level and no need for a subquery

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

To get a count of projects for all employees with multiple projects, do the following

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


You could also use a windowed 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

References:

  • OLAP functions

  • WITH clause


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
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号