초보적인 질문 하나 드립니다. 1 2 730

by KU_EDGE [SQL Query] [2018.05.18 16:27:37]


A테이블에 해당 데이터가 있습니다.

부서       보너스      이름

총무       10만원      홍길동
총무       20만원      홍길동
총무       30만원      홍길동
총무       10만원      김철수
총무       20만원      김철수
 

구하는 목표는 총무팀에서 보너스를 받은 인원입니다.

정답은 2명이죠. 홍길동, 김철수

 

저는 쿼리를 이렇게 짰습니다.

SELECT COUNT(a.이름) 
   FROM 

(

   SELECT 이름

     FROM A테이블 

   WHERE 부서 = '총무' 

   GROUP BY 부서

) a

 

이런식으로 원하는 2 값을 얻었지만 찝찝합니다. 쿼리가 너무 복잡하고 빙 돌아온거 같아서요.

 

깔끔한 방법이 없을까요?

by 아발란체 [2018.05.23 18:12:20]

(인라인뷰)서브쿼리를 써도 로직를 명확하게 쿼리를 만들면 좋은 방법이 될 수 있을 것 같습니다.

근데 지금 위 쿼리는 보너스 항목에 돈이 없어도 조회가 됩니다.

조금 수정한다면..

WITH T AS (
    SELECT '총무' AS 부서, 10 AS 보너스, '홍길동' AS 이름 FROM DUAL
    UNION ALL SELECT '총무' AS 부서, 20 AS 보너스, '홍길동' AS 이름 FROM DUAL
    UNION ALL SELECT '총무' AS 부서, 30 AS 보너스, '홍길동' AS 이름 FROM DUAL
    UNION ALL SELECT '총무' AS 부서, 10 AS 보너스, '김철수' AS 이름 FROM DUAL
    UNION ALL SELECT '총무' AS 부서, 20 AS 보너스, '김철수' AS 이름 FROM DUAL
    UNION ALL SELECT '인사' AS 부서, 10 AS 보너스, '안철수' AS 이름 FROM DUAL
    UNION ALL SELECT '총무' AS 부서, 0 AS 보너스, '박철수' AS 이름 FROM DUAL
    UNION ALL SELECT '총무' AS 부서, NULL AS 보너스, '백철수' AS 이름 FROM DUAL
)
SELECT COUNT(*) FROM (
    SELECT 부서, 이름 FROM T WHERE 부서 = '총무' GROUP BY 부서, 이름 HAVING SUM(보너스) > 0
)

 


by 마농 [2018.05.23 23:36:35]
SELECT COUNT(DISTINCT 이름)
  FROM A테이블
 WHERE 부서 = '총무'
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입