>

동일한 레코드에서 ID 당 고유 값의 발생 횟수를 계산할 수 있지만보다 효율적인 방법이 있어야합니까? COUNT([Value],'2') 와 같은 것 ?

다음은 간단한 예입니다

ID | Value
 1      2
 1      3
 1      3
 1      2
 2      2
 2      3
 2      3
 3      3

이것은 현재 코드입니다 :

SELECT ID, SUM(CASE WHEN Value = '2' THEN 1 ELSE 0 END) AS "COUNT2", 
SUM(CASE WHEN Value = '2' THEN 1 ELSE 0 END) AS "COUNT3"
FROM TABLE
GROUP BY ID

결과 :

ID | Count2 | Count3
 1      2        3
 2      1        2
 3      0        1

고유 값의 개수를 얻는 더 좋은 방법이 있습니까?


  • 답변 # 1

    시도 :

    Select distinct Id, Count2, Count3
    from Table 
    Outer Apply (select count(id) as Count2 from table t 
                 where t.id = Table.id and value = 2) c2
    Outer Apply (select count(id) as Count3 from table t 
                 where t.id = Table.id and value = 3) c3
    Order by Id asc
    
    

    휴대 전화에서 입력 했으므로 약간 조정해야 할 수도 있지만 이런 식으로 작동해야합니다

  • 답변 # 2

    DECODE 를 사용할 수 있습니다  "더 나은"것이 더 간결한 의미라면

    WITH I (ID, V) AS (VALUES 
      (1,2)
    , (1,3)
    , (1,3)
    , (1,2)
    , (2,2)
    , (2,3)
    , (2,3)
    , (3,3)
    )
    SELECT
        ID
    ,   COUNT(DECODE(V,2,1)) AS "Count2"
    ,   COUNT(DECODE(V,3,1)) AS "Count3"
    FROM I
    GROUP BY
        ID
    
    

    반환

    ID Count2 Count3
     -- ------ ------
      1      2      2
      2      1      2
      3      0      1
    
    

  • 답변 # 3

    Db2 LUW 11.1.1.1 이상을 사용하는 경우 SUM 가 가능하다는 사실을 이용할 수 있습니다  와이즈 비즈  값.

    BOOLEAN
    
    
    WITH I (ID, V) AS (VALUES (1,2) , (1,3) , (1,3) , (1,2) , (2,2) , (2,3) , (2,3) , (3,3) ) SELECT ID , SUM(V=2) AS "Count2" , SUM(V=3) AS "Count3" FROM I GROUP BY ID

관련 자료

  • 이전 R의 데이터 프레임에서 몇 개의 열을 선택할 수 있습니까?
  • 다음 opencv - Raspberry Pi의 PYPI에서 패키지 설치