开发者

Count with multiple where conditions

开发者 https://www.devze.com 2023-02-22 19:35 出处:网络
I thought this would have been really easy but I\'m missing something. Here\'s my data: IDEMPIDIndex1 3140215765

I thought this would have been really easy but I'm missing something.

Here's my data:

ID       EMPID    Index1
314      021576   5
315      021576   2
317      021576   8
318      021576   12
500      021576   398
501      021576   388
502      021111   4
503      021111   8 

Here's my SQL statement.开发者_如何学C

SELECT COUNT(DISTINCT EmpID) AS Expr1
    FROM ProfileData
    WHERE (Index1ID = 2) AND (Index1ID = 5)

I'm trying to get a count total of 1


(Index1ID = 2) AND (Index1ID = 5)

Is a where clause which will always return false. If you mean for it to be OR, it would still not work, since it would return 2.


My guess is that you want to know the number of EMPID values that have both a row with an Index1ID value of 2 and an Index1 value of 5 (EMPID 021576 has both, EMPID 021111 has neither). There are a variety of ways to do this

Using set operations

SELECT COUNT(DISTINCT empid)
  FROM (SELECT empid
          FROM ProfileData
         WHERE Index1ID = 2 
        INTERSECT
        SELECT empid
          FROM ProfileData
         WHERE Index1ID = 5)

Or using a GROUP BY

SELECT COUNT(DISTINCT empid)
  FROM (SELECT empid, COUNT(DISTINCT Index1ID) cnt
          FROM ProfileData
         WHERE Index1ID IN (2,5)
         GROUP BY empid)
 WHERE cnt = 2

If you wanted the list of EMPID values that are associated with both Index1ID values, that's easier with the HAVING clause

SELECT empid, COUNT(DISTINCT Index1ID)
  FROM ProfileData
 WHERE Index1ID IN (2,5)
 GROUP BY empid
HAVING COUNT(DISTINCT Index1ID) = 2
0

精彩评论

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